私はタイプがEvent<Something>
の単一のパラメータを持つメソッドを持ち、Something
またはその生の型を抽出する必要があります。それは正式なメソッドのパラメータ型の引数を取得するにはどうすればよいですか?
void method1(Event<MyEnum1> event) {}
<E extends Enum<E>> method2(Event<E> event) {}
<K, V> method3(Event<Map<K, V>> event) {}
のように見えるかもしれませんし、私はmethod1
用関数マッピング
method1 -> MyEnum.class
method2 -> Enum.class
method3 -> Map.class
が欲しい、それが(ParameterizedType) method.getGenericParameterTypes()
を使用して簡単です。 method2
のために、私はParameter
を得ることがType
と
TypeToken.of(method.getDeclaringClass())
.method(method)
.getParameters()
.get(0)
を得るために、グアバ
TypeToken.of(method.getDeclaringClass())
.method(method)
.getTypeParameters()[0]
.getBounds()
を使用することができます。私は、Type
を使用してParameter
を解決する必要があると思いますが、ここで取り残されています。
私はmethod3
について気にしませんが、一般的な方法を知っておくとよいでしょう。私は実際のパラメータのタイプについて気にしない(私は消去を認識している)。
うち上記印刷物それは私が失敗した理由を知るために誰かのために興味深いものがあります。受け入れられた答えが示すように、それは実際には簡単です。私の問題は、 'typeArgument'が' TypeVariableImpl'であり、Eclipseでそれを開き、それが非公開で、どんなインターフェースも実装していないことが分かったことです(これは 'Type'のように不可能ですが、関連クラスは 'sun.reflect.generics.reflectiveObjects.TypeVariableImpl'(sources.jarにはありません)でしたが、私が見ていたものではありませんでした。 – maaartinus