有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中应该怎么定义一下?
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()"; }
}