Java 接口默认方法获取泛型类型:getGenericInfo() 实例解析
获取泛型类型的方法可以使用Java的反射机制来实现。首先,需要定义一个接口,并在接口中添加一个默认方法,代码如下:
public interface MyInterface<T> {
default Class<?> getGenericInfo() {
Type type = getClass().getGenericInterfaces()[0];
if (type instanceof ParameterizedType) {
ParameterizedType paramType = (ParameterizedType) type;
return (Class<?>) paramType.getActualTypeArguments()[0];
}
return null;
}
}
在这个接口中,我们定义了一个默认方法getGenericInfo(),该方法使用反射获取接口的泛型信息。首先,我们通过getClass().getGenericInterfaces()获取实现接口的泛型信息。接口类型会被擦除,因此我们需要通过getGenericInterfaces()方法来获取真实的泛型信息。然后,我们判断泛型信息是否为ParameterizedType类型,如果是,则通过getActualTypeArguments()获取实际的泛型参数类型。最后,将获取到的泛型类型返回。
接下来,我们可以创建一个实现了这个接口的类,并调用getGenericInfo()方法来获取泛型类型,代码如下:
public class MyClass implements MyInterface<String> {
public static void main(String[] args) {
MyClass myClass = new MyClass();
Class<?> genericInfo = myClass.getGenericInfo();
System.out.println(genericInfo); // 输出:class java.lang.String
}
}
在这个示例中,我们创建了一个实现了MyInterface接口的类MyClass,并指定了泛型类型为String。然后,我们创建一个MyClass对象,并调用getGenericInfo()方法来获取泛型类型。最后,将获取到的泛型类型输出到控制台。
通过这种方式,我们可以在接口的默认方法中获取泛型类型。请注意,由于泛型信息在运行时被擦除,所以只能在接口中获取泛型信息,而不能在实现类中获取泛型信息。
原文地址: https://www.cveoy.top/t/topic/qc6k 著作权归作者所有。请勿转载和采集!