2009-05-26 9 views
1

J'ai besoin d'une fonction max dans jstl, donc j'écris une fonction statique et je l'expose dans le tld comme une fonction jstl. Le problème est, je ne sais pas quel type les arguments seront, int, long, double etc. Dois-je créer une fonction pour chaque type de données? ou Peut-être que je peux juste écrire la fonction pour les doubles, et prier que jstl fera la conversion pour moi?fonction générique max jstl

Edit2: Nevermind, je pensais que la définition tld serait aussi simple que T max (T, T), mais ce n'est pas le cas. Je n'ai aucune idée comment faire une définition tld pour la méthode générique. Je suppose malade juste prie pour que le jsp convertira correctement mon type et utiliser Math.max (doubles, doubles)

Répondre

2

Est-ce une fonction max comme Math.max() (prendre deux paramètres, revenir plus), ou quelque chose comme Arrays.sort() (prendre un tableau, renvoie le plus grand).

Dans le premier cas, JSP EL va contraindre les arguments aux types corrects si cela est possible.

Dans le second cas, une méthode distincte est nécessaire pour chaque type de composant de tableau primitif que vous voulez prendre en charge.

+0

sa fonction de Math.max. en fait, je voulais vraiment utiliser varags mais il semble que jsp2.0 ne supporte pas ceux en tant qu'arguments de la fonction jstl: P – mkoryak

2

essayez ceci:

public static <T extends Comparable<? super T>> T max(T a, T b) { 
    if (a.compareTo(b) > 0) { 
     return a; 
    } else { 
     return b; 
    } 
} 

public static void main(String[] args) { 
    System.out.println(max(20, 10)); 
    System.out.println(max(103.2, 120.2)); 
    // it works even on strings... 
    System.out.println(max("aaa", "bbb")); 
    // ... and booleans... 
    System.out.println(max(true, false)); 
} 

en alternative, vous pouvez utiliser des classes Java standard comme Collections et Arrays:

Collections.max(Arrays.asList(10, 20, 30, 40, 50)); 
+0

ill essayer dès que je trouve comment écrire une déclaration de fonction jslt pour cela =) – mkoryak