java 反射

何谓反射:能够分析类能力的程序。
反射机制的应用:在运行时分析类的能力、在运行时查看对象、实现数组的操作代码、利用Method对象。反射是一种功能强大且复杂的机制,使用它的对象是 工具的构造者。时间应用如下:
public class DaoUtil {
/**
* eg. insert into student(name,age) values(?,?)
*
* @param vo
* @param paramValues
* @return
* @throws IllegalArgumentException
* @throws IllegalAccessException
* @throws InvocationTargetException
* @throws InvocationTargetException
*/
public static String getInsertSQLFromVO(Object vo, List paramValues)
throws IllegalArgumentException, IllegalAccessException, InvocationTargetException {
// 保存字段的名称
StringBuilder fieldNames = new StringBuilder("(");
// 保存参数中的问号 “?”
StringBuilder fieldParams = new StringBuilder(" values(");
Class type = vo.getClass();
// 根据对象vo的类型获取改对象中的所有public的方法
Method[] methods = type.getMethods();
for (Method method : methods) {
String methodName = method.getName();
System.out.println(methodName);
// 把get***的方法获取到
if (methodName.startsWith("get") && !"getId".equals(methodName)
&& !"getClass".equals(methodName)) {
String fieldName = methodName.substring(3).toLowerCase();
System.out.println(fieldName);
// 通过方法调用自己,来获取到对象中的指定的fieldName的属性值。
Object fieldVal ;
fieldVal = method.invoke(vo, null);
fieldNames.append(fieldName + ",");
fieldParams.append("?,");
// 把对象中的属性值加入到paramValues参数List中。
paramValues.add(fieldVal);
}
}
fieldNames.deleteCharAt(fieldNames.length() - 1);
fieldParams.deleteCharAt(fieldParams.length() - 1);
// 返回的就是类似这样的一个字符串: (name,age) values(?,?),这个时候paramValues也完成了初始化。
return fieldNames.append(")" + fieldParams.toString() + ")").toString();
}

public static void main(String[]args) throws InvocationTargetException{
User user = new User();
user.setId("1");
user.setName("lizh");
user.setAddress("xi'an");

try {
System.out.print(getInsertSQLFromVO(user,new ArrayList()));
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}

输出:(sex,address,name) values(?,?,?)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值