私はジェネリックスを初めて使用しています。私は以下の構文からわかるように、VはTと同じかサブクラスであるべきですが、これはコンパイルエラーを表示せず、Tが文字列配列のときVが整数であってもFalseを返します。Generics、V extends T、互換性のない型の場合でもエラーなし
class GenMethDemo {
public static <T ,V extends T> boolean isIn(T x, V[] y) {
for (int i =0; i< y.length; i++)
if (x.equals(y[i])) return true;
return false;
}
}
public class App {
public static void main(String[] args) {
String b[] = {"are", "how", "YOU"};
System.out.println(GenMethDemo.isIn(1, b));
}
}
しかし、私は行動が期待されているよう<T extends Comparable<T>, V extends T>
と<T,V extends T>
を交換した場合。 Javaの5/6/7で
この場合、 'T'は' Object'として扱われるので、 'String []'はうまくいきます。 –
次に、ジェネリックの使用は何ですか?強い型の安全のためではありません。 ? – garg10may
少なくとも実行時には、これはTが整数になっているので、エラーを示しているはずです。また、なぜComparableインターフェースを使用するとエラーになるのでしょうか。文字列と整数の両方が同等です。 – garg10may