泛型max jstl函数

时间:2009-05-26 19:08:56

标签: java generics

我需要在jstl中使用max函数,所以我正在编写一个静态函数并将其作为jstl函数暴露在tld中。

问题是,我不知道参数将是什么类型,int,long,double等。我是否必须为每种数据类型创建一个函数? 要么 也许我可以写双打函数,并祈祷jstl会为我做转换?

EDIT2 : 没关系,我认为tld的定义就像T max(T,T)一样简单,但事实并非如此。我不知道如何为泛型方法创建tld定义。我想生病只是祈祷jsp将正确转换我的类型并使用Math.max(double,double)

2 个答案:

答案 0 :(得分:2)

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

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

在第二种情况下,需要为要支持的每个基本数组组件类型使用不同的方法。

答案 1 :(得分: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));