在 Java 中,想象一下这些接口和类:
public interface Iface<S, T> { ... }
public class Parent<A, B> implements Iface<B, A> { ... }
public class Sub extends Parent<String, Integer> { ... }
有没有办法让一个函数接受Iface
并获得它的泛型类型。例如,如果您输入一个Sub.class
:
public void showTypes(Class<Iface<S, T>> ifaceClass) {
// do something...
}
//showTypes(Sub.class) --> S = Integer.class, T = String.class
编辑:关于类型擦除。如果你有一个ArrayList<?>
你不知道它是哪个泛型类型。但这种情况不同。如果我有一个扩展的类,ArrayList<String>
我可以知道它的泛型类型(String.class)。请看这个片段:
@SuppressWarnings("serial")
public class StringList extends ArrayList<String> {
public static void main(String... args) {
ParameterizedType superType =
(ParameterizedType) StringList.class.getGenericSuperclass();
Type[] types = superType.getActualTypeArguments();
Class<?> clss = (Class<?>) types[0];
System.out.println(clss);
}
}