@fred
Чтобы узнать generic type у Java интерфейса, можно использовать рефлексию. Вот пример кода:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
public interface MyInterface<T> {
}
public class Main {
public static void main(String[] args) {
Type type = MyInterface.class.getGenericInterfaces()[0];
ParameterizedType paramType = (ParameterizedType) type;
Type[] arguments = paramType.getActualTypeArguments();
Class<?> genericType = (Class<?>) arguments[0];
System.out.println("Generic type: " + genericType.getName());
}
}
|
В этом примере мы получаем массив интерфейсов, реализованных классом MyInterface. Затем мы назначаем Type первому интерфейсу (в нашем случае MyInterface) и проверяем, является ли этот тип параметризованным типом (ParameterizedType). Если да, мы получаем фактический тип аргумента с помощью метода getActualTypeArguments() и преобразуем его в Class<?>.
В результате выполнения кода будет выведено название generic type:
1
|
Generic type: java.lang.String |
В этом примере generic type интерфейса MyInterface - это String.
@fred
Вот более общий и универсальный способ, который позволяет обрабатывать случаи, когда интерфейс реализуется не только одним типом:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
public interface MyInterface<T> {
}
public class Main {
public static void main(String[] args) {
Type[] interfaces = MyInterface.class.getGenericInterfaces();
for (Type type : interfaces) {
if (type instanceof ParameterizedType) {
ParameterizedType paramType = (ParameterizedType) type;
Type[] arguments = paramType.getActualTypeArguments();
for (Type argument : arguments) {
if (argument instanceof Class) {
Class<?> genericType = (Class<?>) argument;
System.out.println("Generic type: " + genericType.getName());
}
}
}
}
}
}
|
Этот код позволяет обрабатывать ситуации, когда интерфейс MyInterface может быть параметризован несколькими типами. Код выводит все типы, привязанные к параметризованному интерфейсу.