我有以下界面:interface Nofifier<T> { }
。
我有以下实现:class MyClass implements Notifier<String>, Notifier<Integer> { }
。
我可以通过以下方式查询:
MyClass instance = new MyClass();
Class<?> clazz = instance.getClass();
// ...
获取Notifier
实现的MyClass
类型?
答案 0 :(得分:3)
是的 - 您可以致电Class.getGenericInterfaces()
,它会返回Type[]
。这包括类型参数信息。
完整示例:
import java.lang.reflect.Type;
interface Notifier<T> { }
class Foo implements Notifier<String> {
}
class Test {
public static void main(String[] args) {
Class<?> clazz = Foo.class;
for (Type iface : clazz.getGenericInterfaces()) {
System.out.println(iface);
}
}
}
但是,无论如何,您无法在一个类上实现两次相同的接口,因此您的class MyClass implements Notifier<String>, Notifier<Integer>
不应该编译。您应该收到错误,例如:
error: Notifier cannot be inherited with different arguments:
<java.lang.String> and <java.lang.Integer>
来自JLS 8.1.5:
一个类可能不会同时是两个接口类型的子类型,这两个接口类型是同一通用接口(第9.1.2节)的不同参数化,或者是通用接口的参数化的子类型和原始类型命名相同的通用接口,或发生编译时错误。