再起型境界
import java.util.List; public class Test { //引数がCompareble2<T>型のリストであることが保証されるためOK private static <T> Comparable2<T> max1(List<Comparable2<T>> list){ Comparable2<T> max = list.get(0); for(Comparable2<T> t : list){ if(max.compareTo(t) > 0){ max = t; } } return max; } //TはCompareble<T>を継承していることが保証されるためOK private static <T extends Comparable<T>> T max2(List<T> list){ T max = list.get(0); for(T t : list){ if(max.compareTo(t) > 0){ max = t; } } return max; } //これはだめ private static <T> Comparable<T> max3(List<Comparable<T>> list){ Comparable<T> max = list.get(0); for(Comparable<T> t : list){ //Compareble<T>のcompareToの引数はT型であり、Compareble<T>型ではないため不可!! if(max.compareTo(t) > 0){ max = t; } } return max; } } interface Comparable2<T>{ /** 引数のがおおきかったら正、小さかったら負、同じだったら0を返す */ int compareTo(Comparable2<T> t); //Comparebleではメソッドの範囲でTがComparableを実装していることを保証していない // int compareTo(T t); }
読んでおきたい d.hatena.ne.jp