4

Tジェネリック型をオブジェクトにキャストするにはどうすればよいClass<T>ですか?

変数がないため、Class<T> T.classorのようなものは機能しません。Class<T> T.getClass()T

関数は次のようになります。

public Class<T> getType() {
 return // Class of T
}

背景情報: 私はいくつかのクラスを持っていますClass1<T>, Class2<T>, ... すべてextend ParentClass<T>. ParentClass機能を持っていますgetType()Class<?> type変数を作成してそのように型を保存するだけで、型を取得するよりエレガントな方法を探しています。

4

2 に答える 2

5

T実行時にはわかりません( Type eraserのため)。

基本的には実行時MyWonderfulClass<String>になるMyWonderfulClass<Object>ため、コンストラクターまたはセッターでクラスを直接指定する場合を除いて、取得する機会はありません。

//class is a reserved keyword so I call it clazz instead.
public MyClass(Class<T> clazz) {
  this.clazz = clazz;
}

public Class<T> getType() {
  return this.clazz;
}

サブクラスに実装を強制することもできますgetType() : Class<T>

于 2013-09-11T15:36:23.160 に答える
0

あなたはこれを行うことができます:

public class Parent<T> {
    private final Class<T> clazz;

    public Parent(Class<T> clazz) {
        this.clazz = clazz;
    }

    public Class<T> getType() {
        return clazz;
    }
}

public class Foo<T> extends Parent {

    public Foo(Class<T> clazz) {
        super(clazz);
    }
}
于 2013-09-11T15:35:34.913 に答える