问一个比较难的问题(关于反射与委托)

nicq2008 2005-05-08 12:35:29
有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中应该怎么定义一下?
...全文
69 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
nicq2008 2005-05-08
  • 打赏
  • 举报
回复
ClassA的object为一个ClassB的实例或者其他类的实例,不一定是ClassB,但是事先知道的;
helpall 2005-05-08
  • 打赏
  • 举报
回复
class A {
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()"; }
}

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧