这里为什么这样用呢???
package cn.itcast.utils;
import java.lang.reflect.Field;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
public class BeanHandler implements ResultSetHandler {
private Class clazz;
public BeanHandler(Class clazz){
this.clazz = clazz;
}
public Object handler(ResultSet rs) {
try{
if(!rs.next()){
return null;
}
Object bean = clazz.newInstance();
ResultSetMetaData metadata = rs.getMetaData();
int columnCount = metadata.getColumnCount(); //得到结果集中有几列数据
for(int i=0;i<columnCount;i++){
String coulmnName = metadata.getColumnName(i+1); //得到每列的列名
Object coulmnData = rs.getObject(i+1);
Field f = clazz.getDeclaredField(coulmnName);//反射出类上列名对应的属性
f.setAccessible(true);
f.set(bean, coulmnData);
}
return bean;
}catch (Exception e) {
throw new RuntimeException(e);
}
}
}
这里为什么用getDeclaredField()方法,getDeclaredField()方法不是获取私有字段的吗?但是这里它是怎么确定clazz类中的字段都是私有的,或者是getDeclaredField()方法既可以获得私有字段,也可以获得公有字段吗?查jdk api文档就没发现介绍这个方法的详细使用情况,大家都查什么文档呢?
------解决方案--------------------
getDeclaredField是获取已声明的字段
------解决方案-----------