Eclipseはジェネリック・タイプの消しゴムのためにタイプ・パラメーターでinstanceof操作が許可されていないと言います。Tが型パラメータでtが変数の場合、なぜ "t instanceof T"は許されないのですか?
私は、実行時にタイプ情報が残っていないことに同意します。しかし、次のクラスの一般的な宣言を考えてみましょう:
class SomeClass<T>{
T t;
SomeClass(Object o){
System.out.println(o instanceof T); // Illegal
}
}
実行時には、Tは存在しません!しかし、このクラスのIntegerをインスタンス化すると、対応するオブジェクトはInteger型のフィールドtを持ちます。
次に、実行時にIntegerに置き換えることができるTの変数の型をチェックできません。そして、私は実際に "o instanceof Integer"のようなことをしています。
この場合、タイプパラメータを持つinstanceofを許可すると、トラブルが発生して禁止されますか?
あなたはすでに「実行時にはTは存在しません」と言っていますので、既にタイプ消去を認識しているようですね。だから私はあなたがなぜこの行動について混乱しているのか分かりません。 –
それは許可されていないという理由だけでルーブルを引き起こす可能性があるからです。 Tはジェネリック型であり、実際には何でも構いません。 – Peter
[Java:Instanceof and Generics]の重複可能性(http://stackoverflow.com/questions/1570073/java-instanceof-and-generics) – millimoose