参考链接: Java中的接口和继承
泛型的作用就不多介绍了,如果你想具备架构设计能力,那么熟练使用泛型是必不可少的。
不多说了,先定义泛型父类和泛型接口:
package cn.zhh;
public class Parent<T1, T2> {
}
package cn.zhh;
public interface Interface<T> {
}
然后,定义一个子类,分别继承和实现以上的父类以及接口:(记得泛型参数写在父类或者接口那里,否则视为该类声明泛型参数)
package cn.zhh;
public class Son extends Parent<Integer, Long> implements Interface<String>, Cloneable {
}
接着,分别获取父类和接口的泛型参数:
package cn.zhh;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.util.Arrays;
/**
* 测试
*
* @author Zhou Huanghua
*/
public class Test {
public static void main(String[] args) {
Class<Son> clazz = Son.class;
// 接口泛型类
Type[] genericInterfaces = clazz.getGenericInterfaces();
Arrays.stream(genericInterfaces).forEach(System.out::println);
Type genericInterface = genericInterfaces[0];
System.out.println(genericInterface.getTypeName());
if (genericInterface instanceof ParameterizedType) {
print((ParameterizedType) genericInterface);
}
System.out.println("\n----------------------------------------");
// 父类泛型类
Type genericSuperclass = clazz.getGenericSuperclass();
System.out.println(genericSuperclass.getTypeName());
if (genericSuperclass instanceof ParameterizedType) {
print((ParameterizedType) genericSuperclass);
}
}
private static void print(ParameterizedType parameterizedType) {
System.out.println(parameterizedType.getOwnerType());
System.out.println(parameterizedType.getRawType());
System.out.print("泛型参数:");
Arrays.stream(parameterizedType.getActualTypeArguments()).forEach(arg -> System.out.print(arg + "、"));
}
}
最后,验证一下结果: