ジェネリッククラスのインスタンス化された型に特定のプロパティがあるかどうかを確認したいと思います。例:
class Foo<T> {
void bar () {
if (T instanceof Serializable) // does not compile
...
}
}
実行時に一般的な情報が完全に失われるのではないかと思いますか?そして、それは私がやりたいことを達成する方法がないことを意味しますか?
そして、それは私がやりたいことを達成する方法がないことを意味しますか?
あなたは書ける:
class Foo<T> {
private final Class<T> clazz;
Foo (final Class<T> clazz) { // require creator to supply a Class<T>
this.clazz = clazz;
if (clazz == null) {
throw new NullPointerException();
}
}
void bar () {
if (Serializable.class.isAssignableFrom(clazz)) {
...
}
}
}
あなたは正しいです、generic type information
実行時に失われます。これは型消去と呼ばれます。コンパイラはすべてのジェネリック型を削除し、実行時にキャスト(必要な場合)を実行します。そしてすべて