1

これが可能かどうかはわかりませんが、もしそうなら、それは私を大いに助けてくれるでしょう:

与えられた:

public interface Foo<T> {

    public void onUpdate(T t);
}

を実装するクラスのインスタンスがある場合Foo、ジェネリック型を取得することは可能ですか?

public void someMethod(byte[] bytes) {
    /* 
     * this.bar implements Foo<ExampleType>
     *
     * I want to convert bytes to ExampleType using GSON but don't know the type.
     *
     * this.bar.onUpdate(...)
     */ 
}

のインスタンスを作成するときに使用されるジェネリック型を取得することはできますthis.barか?

4

1 に答える 1

2

いいえ、Java でジェネリック型を取得することはできません。その情報は、型消去のために実行時に利用できません。

次のような具象型に対して個別のインターフェースを使用できます。

interface FooExampleType extends Foo<ExampleType>{   

}

また、インターフェイスを生成した後、ジェネリック引数の型を取得する必要があると感じている場合は、コードの設計に問題があることを指摘したいと思います。コードで適切なポリモーフィック動作に従っていれば、生成後に型を取得する必要はありません。

于 2013-10-18T02:05:36.020 に答える