次のコードをどのようにコンパイルすることも可能ですか?私が見る限り、count関数は2つの異なる型で呼び出されていますが、コンパイラはこのコードを喜んでコンパイルしません。2つの異なる汎用引数を使用して汎用関数を呼び出す場合
public class Test {
public static <T> int count(T[] x,T y){
int count = 0;
for(int i=0; i < x.length; i++){
if(x[i] == y) count ++;
}
return count;
}
public static void main(String[] args) {
Integer [] data = {1,2,3,1,4};
String value = "1";
int r =count(data,value);
System.out.println(r + " - " + value);
}
}
Javaのジェネリックスは視覚的なトリックであることを理解する必要があります。コンパイラを使用すると、オブジェクトの種類が削除されます。 Googleの "Javaのタイプの消去"は、汚い詳細を見つける。 – robertvoliva
確かに。私は多かれ少なかれ起こっていたことを知っていましたが、私は理由を知りたいと思っていました。私は、あなたが言ったように、(ジェネリックの)ジェスチャーは "ただの視覚的なトリック"(私はそれを汚いと呼ぶだろう)であることを認識しました。 – Stan