簡體   English   中英

泛型max jstl函數

[英]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類,如CollectionsArrays

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM