java相关。请问Class的clazz在各个语句里是什么用?我总不理解这一点,麻烦详解一下。谢谢

publicclassDataUtil{//将rs中的值封装成一个集合publicstaticCollectiongetDatas(Collectionresult,Re... public class DataUtil {

//将rs中的值封装成一个集合
public static Collection getDatas(Collection result, ResultSet rs, Class clazz) {
try {
while (rs.next()) {
//创建类的实例
Object vo = clazz.newInstance();
//获取本对象的属性
Field[] fields = clazz.getDeclaredFields();
//获取父类的属性
Field[] superFields = clazz.getSuperclass().getDeclaredFields();
//父类的属性和自己的属性相加
Field[] allFields = addFields(superFields, fields);
//遍历所有的属性
for (Field field : allFields) {
//获得setter方法的方法名
String setterMethodName = getSetterMethodName(field.getName());
//获得setter方法
Method setterMethod = clazz.getMethod(setterMethodName, field.getType());
invokeMethod(rs, field, vo, setterMethod);
}
result.add(vo);
}
rs.close();
} catch (Exception e) {
e.printStackTrace();
throw new DataException(e.getMessage());
}
return result;
}

//执行一个方法, 从ResultSet中获取一个字段的数据, 调用vo的setter方法
private static void invokeMethod(ResultSet rs, Field field, Object vo,
Method setterMethod) {
try {
//当使用ResultSet获取某个字段的时候, 如果没有该字段, 会出现SQLException, 在这里忽略该异常
String value = rs.getString(field.getName());
//从ResultSet中获取与该对象属性名一致的字段, 并执行setter方法
setterMethod.invoke(vo, value);
} catch (Exception e) {
//忽略异常
}
}

//根据属性名获得setter方法的方法名
private static String getSetterMethodName(String fieldName) {
String begin = fieldName.substring(0, 1).toUpperCase();
String end = fieldName.substring(1, fieldName.length());
String methodName = "set" + begin + end;
return methodName;
}

//相加两个数组
private static Field[] addFields(Field[] f1, Field[] f2) {
List<Field> l = new ArrayList<Field>();
for (Field f : f1) l.add(f);
for (Field f : f2) l.add(f);
return l.toArray(new Field[f1.length + f2.length]);
}

public static void main(String[] args) {
JDBCExecutor executor = JDBCExecutor.getJDBCExecutor();
ResultSet rs = executor.executeQuery("select * from t_book_type");
Collection<Type> result = DataUtil.getDatas(new ArrayList<Type>(), rs,
Type.class);
for (Type type : result) {
System.out.println(type.getTYPE_NAME());
}
}
}
展开
 我来答
百度网友b4855c5
推荐于2017-11-26 · TA获得超过1071个赞
知道小有建树答主
回答量:823
采纳率:0%
帮助的人:953万
展开全部
从你的代码中来解释

public static Collection getDatas(Collection result, ResultSet rs, Class clazz) {// 这里的clazz代表的是一个类型参数,表示某种类型

try {
while (rs.next()) {

Object vo = clazz.newInstance(); // 表示根据这种类型来创建一个这种类型的实例

Field[] fields = clazz.getDeclaredFields(); // 这种类型中有哪些被声明的属性

Field[] superFields = clazz.getSuperclass().getDeclaredFields(); // 这种类型的父类型中有哪些声明的属性

Field[] allFields = addFields(superFields, fields);

for (Field field : allFields) {

String setterMethodName = getSetterMethodName(field.getName());

Method setterMethod = clazz.getMethod(setterMethodName, field.getType()); // 这种类型中取出指定的声明方法
invokeMethod(rs, field, vo, setterMethod);
}
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式