Generics、続き。
先日の続き的な感じで。
- パラメータのクラスが結果を格納するクラスに属さない場合、error扱いでチェックされる。
- パラメータに互換性がないクラスを指定するとwarning扱いでチェックされ、実行時に当然ClassCastException。
- 比較が1回多い件は、とりあえず大目に見て下さい。
この「静的にチェックできるところは極力チェックする」っていうjavaの特徴は、逆に、javascriptとかの所謂Light Weight Languageよりも気軽にそれなりのコードを書ける利点だと思うんだけど、どーなんでしょうか。
import java.math.BigDecimal; public class Max { /** * 指定したパラメータの最大値を返却する。 * @param <T> * @param ts * @return 最大値 */ public static <T> T max(T...ts){ if(ts==null||ts.length==0){ return null; } else { T ret = ts[0]; Comparable retc = (Comparable) ret; for (T t : ts) { Comparable c = (Comparable) t; if(retc.compareTo(c)<0){ ret = t; retc = c; } } return ret; } } /** * 動作確認用 * @param args */ public static void main(String[] args) { String maxString = Max.max("a","あ","b"); System.out.println(maxString); //"あ" Integer maxInteger = Max.max(1,2,10,-1); System.out.println(maxInteger); //10 BigDecimal maxBigDecimal = Max.max(new BigDecimal(1),new BigDecimal(0.2),new BigDecimal(1.0012)); System.out.println(maxBigDecimal); //1.0012 // maxInteger = Max.max(new BigDecimal(1),new BigDecimal(0.2),new BigDecimal(1.0012)); //Type mismatch Object maxObject = Max.max(1,10); System.out.println(maxObject); //10 // maxObject = Max.max(1,"hoge"); //throws ClassClastException java.util.Date maxDate = Max.max(new java.util.Date(), java.sql.Date.valueOf("2010-01-01")); System.out.println(maxDate); //"2010-01-01" } }