Java中的Type详解
ParameterizedType 参数化类型的使用
package com.keytop.att;
/**
* 实体类
* Created by fengwenhua on 2017/4/25.
*/
public class UserTest {
private String userName;
private String description;
public UserTest(){
this.userName = "Deity";
this.description = "新晋段子手";
System.out.println("大名:"+userName+"&简介:"+description);
}
//Getter & Setter ...
}
package com.keytop.att;
import org.junit.Test;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
/**
* 参数化类型使用
* Created by fengwenhua on 2017/4/25.
*/
public class ClazzUtils {
/**超类*/
public class TestSuperClazz<T>{
}
/**子类*/
public class TestClazz extends TestSuperClazz<UserTest>{
}
@SuppressWarnings("unchecked")
public <T> T getGenericInstance(Class<T> clazz){
Type type = ((ParameterizedType)clazz.getGenericSuperclass()).getActualTypeArguments()[0];
try {
T instance = ((Class<T>)type).newInstance();
} catch (InstantiationException | IllegalAccessException e) {
e.printStackTrace();
}
return null;
}
@SuppressWarnings("unchecked")
@Test
public void test() throws IllegalAccessException, InstantiationException {
getGenericInstance(TestClazz.class);
}
}