より一般的にリストの最大値を見つけようとしています。ワイルドカードを適用しました。
public class Main{
public static void main(String[] args){ }
public static <T extends Comparable<? extends T>> T max(Collection<? extends T> c){
T max= c.iterator().next();
for(T element : c){
if(element.compareTo(max)>0) max=element;//Compile error
}
return max;
}
}
コンパイラから次のエラー メッセージが表示されました。
incompatible types: T cannot be converted to CAP#1
where T is a type-variable:
T extends Compareble<? extends T> declared in method <T>max(Collection<? extends T>)
where CAP#1 is a fresh type-variable:
CAP#1 extends T from capture ? extends T
このエラーメッセージについて疑問があります
新鮮な型変数とはどういう意味ですか? JLS 4.1 で書かれているように、Java プログラミング言語には 2 種類の型があります。プリミティブ型と参照型です。また、式の型である名前のない特別な null 型もあり null
ます。
CAP#1 の新しい型変数とは何ですか?