获取泛型实例代码
public static <T> T getInstance(Object o) {
try {
Type type = o.getClass().getGenericSuperclass();
if (type == null) {
return null;
}
ParameterizedType parameterizedType = null;
if (type instanceof ParameterizedType) {
parameterizedType = (ParameterizedType) type;
}
if (parameterizedType == null) {
return null;
}
Type[] types = parameterizedType.getActualTypeArguments();
if (types.length == 0) {
return null;
}
Type realType = parameterizedType.getActualTypeArguments()[0];
Class<T> clz = (Class<T>) realType;
return clz.newInstance();
} catch (InstantiationException | IllegalAccessException e) {
e.printStackTrace();
}
return null;
}
测试:
public class UserTest<T> {
protected T test;
public UserTest() {
this.test = createTest();
}
private T createTest() {
return Util.getInstance(this);
}
}
public class Test {
public void getData() {
System.out.println("getData");
}
public void request() {
System.out.println("request");
}
}
public class Main extends UserTest<Test> {
private Test get(){
return test;
}
public static void main(String[] args) {
new Main().get().request();
new Main().get().getData();
}
}