汎用クラスを取得する方法
1861 ワード
1、汎用クラス
2.汎用タイプを含むベースクラスの定義
3、ベースクラスを継承し、具体的な汎用クラスに入る
public class Function {
private Long id = new Long(0);
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
}
2.汎用タイプを含むベースクラスの定義
public abstract class Father<T> {
private Class<T> entityClass;
private T model;
public abstract void say();
/**
*
*/
public Class<T> getEntityClass() {
Class clazz = getClass(); //
Type genericType = clazz.getGenericSuperclass(); // Type,
if(genericType instanceof ParameterizedType){
Type[] params = ((ParameterizedType)genericType).getActualTypeArguments(); //
if(params!=null && params.length>0){
entityClass = (Class)params[0];
}
}
return entityClass;
}
public T getModel() {
Class<T> clazz = getEntityClass();
if(clazz!=null){
try{
model = clazz.newInstance(); //
}catch (InstantiationException e){
e.printStackTrace();
}catch (IllegalAccessException e){
e.printStackTrace();
}
}
return model;
}
}
3、ベースクラスを継承し、具体的な汎用クラスに入る
public class Son extends Father<Function> {
@Override
public void say() {
String name = null;
if(getEntityClass()!=null) name = getEntityClass().getName();
System.out.println(name);
Function func = (Function)getModel();
if(func!=null){
System.out.println(func.getId());
}
}
public static void main(String[] args) {
Son fa = new Son();
fa.say();
}
}