@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 может быть параметризован несколькими типами. Код выводит все типы, привязанные к параметризованному интерфейсу.