2009-05-26 54 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