次の例を検討してください
class test<E>{
public int getNum(int i){
return i;
}
public E getNum1(E i){
return i;
}
public static <E> E getNum(E i){
return i;
}
}
最初のメソッド宣言: 戻り値の型はわかっています
2 番目のメソッド宣言: 戻り値の型が不明です
3 番目のメソッド宣言: 戻り値の型は不明 + 静的です
質問: ジェネリックに静的メソッドを使用する場合、型パラメーター<E>
を指定する必要があります。なぜそうなのか、または型パラメータの意味とその目的は何ですか? メソッドが非静的の場合、型パラメーターはありませんが、この場合、次の<E>
ようなクラス宣言があります。public class <E> {...}
ワイルドカードでこれを検討してください
//This does not compile, how to make it correct
public static getIndex(List<?>, int index){
return list.get(index);
}
public static <E> E getIndex1(List<E> list, int index){
return list.get(index);
}
繰り返しますが、最初のメソッドはコンパイルされません。戻り値の型に無制限のワイルドカードを使用してコンパイルする方法がわかりません
上記の 2 つのメソッド宣言の違いは何ですか?
ワイルドカード?
は任意のタイプをE
示し、未知のタイプを示します。
any type
正しいので、それはどのように重要some unknown type
ですか?