Да - вы можете позвонить по телефону 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) или подтип параметризации общего интерфейса и необработанного типа, называющего тот же общий интерфейс, или ошибка времени компиляции.