spring - java反射问题求解
本文介绍了spring - java反射问题求解的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
问 题
写一个方法:
public void (类,参数1,参数2) {
}
调用这个方法的类是各个不同的类,但是这些类中都有一个公共的属性isTm,想把这个函数定义成公共的。不同的类传进来,可以根据不同的类,来设置属性isTm的值,应该如何设计和实现?
举例如下:
package basic;
public class Test {
public void updateIsTm(T<? extends Object> pojo) {
if (null != pojo) {
// TODO
//如果传进来的是A a对象,就调用a.setIsTm()方法,修改值。
//如果传进来的是B b对象,就调用b.setIsTm()方法,修改值。
}
}
}
//类A和类B有公共的属性isTm
class A {
String a;
String isTm;
public String getIsTm() {
return isTm;
}
public void setIsTm(String isTm) {
this.isTm = isTm;
}
}
class B {
String b;
String isTm;
public String getIsTm() {
return isTm;
}
public void setIsTm(String isTm) {
this.isTm = isTm;
}
}
谢谢~~
解决方案
设计一个接口,让要调用这个函数的类都实现这个接口
interface IHaveTm {
void setIsTm(String isTm);
String getIsTm();
}
public void <T extends IHaveTm> updateIsTm(T t, ...) {
t.setIsTm(...)
}
补充:
如果不修改调用这个函数的类,做无侵入式设计的话,估计只能用反射了
public void updateIsTm(Object obj, ...) throws Exception {
Method m = obj.getClass().getDeclaredMethod("setIsTm", String.class);
if (m != null) {
m.invoke(obj, ...);
}
}
这样的话就得靠约定来保证调用的安全性了,不建议这么做
这篇关于spring - java反射问题求解的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文