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);
}
}