由于设计需要看拉些java反射的知识点,有几个问题没有理解:
1。反射用来动态的检查对象和修改其字段调用方法,但是一个类A只有一个Class对象与其对应,那么当A有10个对象,怎么知道更改的是那个
2。UI设计中反射应用是否意味着MVC的各类中不需要在设置相互的对象引用,比如,View的对象中要设置M的对象,用来访问M的属性
哪位朋友知道的,请解答下(希望能阐述下反射的理解和应用范围),谢谢,感激不仅
1。反射用来动态的检查对象和修改其字段调用方法,但是一个类A只有一个Class对象与其对应,那么当A有10个对象,怎么知道更改的是那个
2。UI设计中反射应用是否意味着MVC的各类中不需要在设置相互的对象引用,比如,View的对象中要设置M的对象,用来访问M的属性
哪位朋友知道的,请解答下(希望能阐述下反射的理解和应用范围),谢谢,感激不仅
解决方案 »
- 验证xml文件时出错
- 在线急求。关于Date类的长整形值
- vss中check in和commit change有什么区别
- RCP开发 VIEW里面刷新问题
- 请教二个用servlet做jsp网页的问题,谢谢!(我是菜鸟,请别见笑)
- JAVA 3D问题,高手请进
- 如何调用同目录下的对象?(在线结贴)
- jsoup 报以下异常 请高手帮忙分析
- 谁能帮帮我,java.sql.SQLException: Io 异常:
- 谁能解释一下关于线程的问题,这个题目很常见啊,是如何实现的呢
- 求助:
- 奇怪的异常: java.net.MalformedURLException: unknown protocol: https
Class c = myForm.getClass();
Field[] fields = c.getDeclaredFields();//得到此类所有的字段
Method method = null;
for (int i = 0; i < fields.length; i++) {
String tempField = fields[i].getName();
String tempMethod = "set" + tempField.substring(0, 1).toUpperCase() +
tempField.substring(1);//根据字段名拼凑其set方法名
Class cls[] = new Class[1];
Object obj[] = new Object[1]; try {
String fil = BaseFormat.getClassName(fields[i].getType().
getName());
//得到每个字段的数据类型,也即是set方法的参数类型
if (fil.equals("String")) {
//
cls[0] = Class.forName("java.lang.String");
//声明该set方法的参数类型
obj[0] = rs.getString(tempField);
//传入其具体的参数,此等价与 setXXX(tempField);
} else if(fil.equals("int")){
cls = new Class[] {int.class};
obj = new Object[]{new Integer(rs.getInt(tempField))}; }else if(fil.equals("long")){
cls = new Class[] {long.class}; obj = new Object[]{new Long(rs.getLong(tempField))};
} } catch (Exception ex) { log.error("asd" +ex);
}
try { method=c.getMethod(tempMethod,cls);
//通过方法名和参数类型确定得到一个方法
} catch (Exception ex1) {
log.error("method" + ex1);
}
try { method.invoke(myForm, obj);
//执行此方法,(myForm为执行的具体对象,obj为传的参数值)
} catch (Exception ex2) {
log.error(ex2);
}
}
return myForm;
}
leckylee说的很清楚了,反射在得到某一个变量或者方法的时候是要把实例传入的to pastom:
当然了
我替上面回答了
反射的作用很多,如遍历对象及方法。而且最方便的就是能够自动调用需要的方法
给个例子:
class FatherOperator{
public void operator(){
}
}class OperatorA extends FatherOperator{
public void operator(){
}
}class OperatorB extends FatherOperator{
public void operator(){
}
}如果你的程序是从socket接收操作指令A或B,然后调用相应的操作代码,只需要通过反射找到需要的OperatorB或OperatorA,然后调用operator()方法就可以了。这样程序接口不许变化,有新的需求时添加新的OperatorX类就可以了,这样程序的扩展就容易多了。
还有很多用途,自己想想。不过反射对效率是有影响的,相关部分代码不可以搅乱。
getName());
请问BaseFormat.getClassName()是什么意思,BaseFormat是自己写的类吗