0

ジェネリッククラスのインスタンス化された型に特定のプロパティがあるかどうかを確認したいと思います。例:

class Foo<T> {
  void bar () { 
    if (T instanceof Serializable)   // does not compile
      ...
  } 
}

実行時に一般的な情報が完全に失われるのではないかと思いますか?そして、それは私がやりたいことを達成する方法がないことを意味しますか?

4

2 に答える 2

6

そして、それは私がやりたいことを達成する方法がないことを意味しますか?

あなたは書ける:

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)) {
      ...
    }
  } 
}
于 2013-02-23T20:47:11.860 に答える
2

あなたは正しいです、generic type information実行時に失われます。これは型消去と呼ばれます。コンパイラはすべてのジェネリック型を削除し、実行時にキャスト(必要な場合)を実行します。そしてすべて

于 2013-02-23T20:42:42.800 に答える