yx:反射、泛型、注解

时间:2022-01-09 19:22:46

1、某个方法的参数是泛型的写法,如何知道参数对象有哪些属性和方法以及属性的类型?

例:
import org.springframework.util.CollectionUtils;

public void getProperties(List<T> dataset) {
if(CollectionUtils.isEmpty(dataset) ){
return null;
}
T t = dataset.get(0);
// 得到泛型T.class
Class entityClass = t.getClass();
//获取实体类的所有属性
Field[] field = entityClass.getDeclaredFields();
int columnNum = fieldColumns.length;
// 所有属性的get方法名
Method[] methods = new Method[columnNum];
// 所有属性的类型type
String[] types = new String[columnNum];
for(int j=0;j<columnNum;j++) {
String name = field[j].getName(); //获取属性的名字
name = name.substring(0,1).toUpperCase()+name.substring(1);
methods[j] = entityClass.getMethod("get"+name);
types[j] = field[j].getGenericType().toString();
}

// 怎样获取对象某个属性的值??
// 方法名.invoke(对象),该方法获取到的是Object类型,如果需要可以用属性的强制类型转换

例:
if( types[j].equals("class java.lang.String") )
cell.setCellValue( (String)methods[j].invoke(dataset.get(i-1)) );
}

存在问题:Boolean类型的属性的方法并不能用get写法(例如getIsBoy写法不对,get 方法名适用于一般属性比如getName);
如果我仅想获取类的部分属性,另外属性不想获取,怎样灵活自己决定?
由此引入自定义注解类。

2、自定义注解类