2009-05-26 52 views
1

我需要在我的jstl中有一个max函数,所以我正在编写一个静态函数并将其作为jstl函数在tld中公开。generic max jstl函数

问题是,我不知道什么类型的参数将是,int,long,double等。我必须为每个数据类型创建一个函数吗? 或 也许我可以只写双打的功能,并祈祷jstl会为我做转换?没想到,我以为tld的定义就像T max(T,T)一样简单,但事实并非如此。我不知道如何为泛型方法做一个tld定义。我猜你只是祈祷jsp会正确地转换我的类型并使用Math.max(double,double)

回答

2

是最大函数,如Math.max()(带两个参数,返回更大),或者类似Arrays.sort()一个数组,返回最大值)。

在第一种情况下,如果可能,JSP EL会将参数强制转换为正确的类型。

在第二种情况下,对于您要支持的每个基本数组组件类型,都需要一个独特的方法。

+0

它的一个math.max功能。其实,我真的想使用varags,但它看起来像jsp2.0不支持那些作为jstl函数参数:P – mkoryak 2009-05-26 19:24:35

2

试试这个:

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)); 
} 

在替代你可以使用标准的Java类,如CollectionsArrays

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

虐待尝试,只要我找出如何编写一个jslt函数声明为=) – mkoryak 2009-05-26 20:11:47