public static Object transall(Object ob) { String fieldname = "";
String fristname = "";
Field[] f = ob.getClass().getDeclaredFields();
for (int i = 0; i < f.length; i++) {
fieldname = f[i].getName().toLowerCase();
fristname = fieldname.substring(0, 1).toUpperCase();
try {
Method me = ob.getClass().getMethod(
"get" + fristname + fieldname.substring(1),
new Class[0]);
Object myob = me.invoke(ob, new Object[0]); if (myob != null
&& myob.getClass().isAssignableFrom(String.class)) {
String s = (String) myob;
Method me1 = ob.getClass().getMethod(
"set" + fristname + fieldname.substring(1),
new Class[] { String.class });
me1.invoke(ob, new Object[] { trans(s.trim()) });
} } catch (Exception e) {
e.printStackTrace();
}
}
return ob;
}
希望能加上详细解释,谢谢大家了。
String fristname = "";
Field[] f = ob.getClass().getDeclaredFields();
for (int i = 0; i < f.length; i++) {
fieldname = f[i].getName().toLowerCase();
fristname = fieldname.substring(0, 1).toUpperCase();
try {
Method me = ob.getClass().getMethod(
"get" + fristname + fieldname.substring(1),
new Class[0]);
Object myob = me.invoke(ob, new Object[0]); if (myob != null
&& myob.getClass().isAssignableFrom(String.class)) {
String s = (String) myob;
Method me1 = ob.getClass().getMethod(
"set" + fristname + fieldname.substring(1),
new Class[] { String.class });
me1.invoke(ob, new Object[] { trans(s.trim()) });
} } catch (Exception e) {
e.printStackTrace();
}
}
return ob;
}
希望能加上详细解释,谢谢大家了。
解决方案 »
- 这个代码怎么改就正确了?
- 求教:服务器端内容变化如何实时通知到图形客户端?高手请进。
- java基础问题
- Java程序问题:先产生1万个随机数,再使用多线程对该数进行三种排序,分别记录排序运行时间,本人是新手,多谢列位指教了!
- Vector.get(int index)返回值的问题
- 为什么我用IP访问, 怎么之后运行的程序中运行时得到的是 主机名?
- 输入一个数字的方法有几种呢?求JAVA中输入数字的方法
- 大家帮忙看一下,帮解决了,很简单的一个问题!
- 关于在Applet 中使用Swing
- “Java的事件是从无到有,MFC的消息是从有到无。”
- 第一问
- 一个类继承另一个类后,仅仅是构造函数里有一个 super(); 这与 super( parameter );有什么区别?谢谢。
String fieldname = "";
String fristname = "";
// 得到ob类中所有的字段,getDeclaredFields表示所有声明的字段,
// 而getFields()表示所有声明的public字段
Field[] f = ob.getClass().getDeclaredFields(); // 对字段进行遍历
for (int i = 0; i < f.length; i++) { // 获得字段名的小写字母形式
fieldname = f[i].getName().toLowerCase(); // 截取字段名的第一个字母的大写形式
fristname = fieldname.substring(0, 1).toUpperCase(); try {
// 从ob的类中寻找字段的get方法,new Class[0]表示get方法没有参数
// getMethod的第一个参数表示寻找的方法名
// 第二个参数表示方法的参数类型
Method me = ob.getClass().getMethod(
"get" + fristname + fieldname.substring(1),
new Class[0]
); // 调用ob的getXxx方法,new Object[0]表示没有参数,调用结果赋给myob
// invoke的第一个参数表示调用哪一个对象的方法,好比:ob.getXxx()
// 第二个参数表示传入的参数,是个Object数组
Object myob = me.invoke(ob, new Object[0]); // myob不为空,且myob属于String类型时
if (myob != null && myob.getClass().isAssignableFrom(String.class)) { // 将myob强转成String对象
String s = (String) myob; // 从ob的类中寻找字段的set方法,set方法带有一个String参数
Method me1 = ob.getClass().getMethod(
"set" + fristname + fieldname.substring(1),
new Class[] { String.class }
); // 用去除空格的s作为参数调用ob的setXxx方法(trans不知道是做什么的)
me1.invoke(ob, new Object[] { trans(s.trim()) });
}
} catch (Exception e) {
e.printStackTrace();
}
}
return ob;
}
name
对应的方法为
getName
setName注意首字母被大写了,这是 java Bean规定的,没什么可解释的!这些都是反射的功能。 可以衍生出很强的功能。呵呵呵!
火龙果解释的很好,我就不多说了!