Java泛型反射:子类的通用字段类型

Rob*_*fat 4 java generics reflection

给出两个这样的类:

class Example1<A,B> {

  public Map<A,B> someMap = new HashMap<A,B>();

}

class Example2 extends Example1<URL, URL> {


}
Run Code Online (Sandbox Code Playgroud)

有没有办法使用反射我可以确定Example2的Map的组件类型?

我知道我能做到:

ParameterizedType t = (ParameterizedType) Example2.class.getFields()[0].getGenericType();
Run Code Online (Sandbox Code Playgroud)

但是从那里,我似乎无法弄清楚这两个组件是URL.

有没有人有任何想法?

Kir*_*oll 7

达隆并不完全正确.以下将打印出您想要的内容:

ParameterizedType superClass = (ParameterizedType) Example2.class.getGenericSuperclass();
System.out.println(superClass.getActualTypeArguments()[0]);
System.out.println(superClass.getActualTypeArguments()[1]);
Run Code Online (Sandbox Code Playgroud)

打印出来:

class java.net.URL
class java.net.URL
Run Code Online (Sandbox Code Playgroud)