我需要在jstl中使用max函数,所以我正在编写一个静态函数并将其作为jstl函数暴露在tld中。
问题是,我不知道参数将是什么类型,int,long,double等。我是否必须为每种数据类型创建一个函数? 要么 也许我可以写双打函数,并祈祷jstl会为我做转换?
EDIT2 : 没关系,我认为tld的定义就像T max(T,T)一样简单,但事实并非如此。我不知道如何为泛型方法创建tld定义。我想生病只是祈祷jsp将正确转换我的类型并使用Math.max(double,double)
答案 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类,如Collections
和Arrays
:
Collections.max(Arrays.asList(10, 20, 30, 40, 50));