有classA和ClassB
Class ClassA
{
private Object object;
private propertyA;
public ClassB getObject()
{
return object;
}
public void setObject(Object object)
{
this.object=object;
}
}
ClassB有一个public方法getPropertyB();
ClassA的object为一个ClassB的实例;
我想通过反射得到ClassB或ClassA的getPropertyB()返回的值
条件:
1、 如果ClassA有getPropertyB()方法则调用ClassA的getPropertyB()否则调用ClassB的getPropertyB();
2、 ClassB是动态的,有可能是其他类,但是事先知道的;
我在ClassA中应该怎么定义一下?
Class ClassA
{
private Object object;
private propertyA;
public ClassB getObject()
{
return object;
}
public void setObject(Object object)
{
this.object=object;
}
}
ClassB有一个public方法getPropertyB();
ClassA的object为一个ClassB的实例;
我想通过反射得到ClassB或ClassA的getPropertyB()返回的值
条件:
1、 如果ClassA有getPropertyB()方法则调用ClassA的getPropertyB()否则调用ClassB的getPropertyB();
2、 ClassB是动态的,有可能是其他类,但是事先知道的;
我在ClassA中应该怎么定义一下?
解决方案 »
- 帮忙看个错误,什么意思
- Java编译没问题,运行却出现错误,运行不了
- 金额转换
- 使用JAVA发送FAX
- java读取excel中存储的矩阵数据
- 如何将java保存为utf8编码?
- 急!急!急!有没有用jfreechart pja在linux下生成图表的,如何在linux下使用
- WEB(Struts)服务属性参数设置
- java/jsp中的编码问题。。。。。
- 请问:如果名字是中文的文件来压缩,则压缩包中的文件名字变成乱码,如何解决带中文名字压缩的问题?
- 菜鸟问题,高手帮忙
- 调用JTextField 的 setText方法时出现IllegalStateException: Attempt to mutate in notification的异常
Object o;
public void setObject(Object o){
this.o = o;
}
public static void main(String[] args) {
try{
A a = new A();
a.setObject(new B());
// a.setObject(new C());
a.test();
}catch(Exception e){e.printStackTrace();}
} public void test() throws Exception {
String str = null;
boolean methodDeclared = false;
if(o != null) {
Method[] ms = o.getClass().getDeclaredMethods();
for(int i = 0; !methodDeclared && i < ms.length; ++i) {
if (!ms[i].getName().equals("getMethodB"))
continue;
str = (String)ms[i].invoke(o,null);
methodDeclared = true;
}
}
if(!methodDeclared)
str = getMethodB();
System.out.println("str="+str);
}
public String getMethodB() { return "A's getMethodB()"; }
}class B {
public String getMethodB() { return "B's getMethodB()"; }
}
class C {
public String getMethodB() { return "C's getMethodB()"; }
}