[英]generic max jstl function
我需要在jstl中使用max函數,所以我正在編寫一個靜態函數並將其作為jstl函數暴露在tld中。
問題是,我不知道參數將是什么類型,int,long,double等。我是否必須為每種數據類型創建一個函數? 或者也許我可以寫雙打函數,並祈禱jstl會為我做轉換?
edit2 :沒關系,我認為tld定義會像T max(T,T)一樣簡單,但事實並非如此。 我不知道如何為泛型方法創建tld定義。 我想生病只是祈禱jsp將正確轉換我的類型並使用Math.max(double,double)
它是一個像Math.max()
這樣的最大函數(取兩個參數,返回更大),或類似Arrays.sort()
(取一個數組,返回最大值)。
在第一種情況下,如果可能的話,JSP EL將強制將參數強制轉換為正確的類型。
在第二種情況下,需要為要支持的每個基本數組組件類型使用不同的方法。
嘗試這個:
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));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.