有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中应该怎么定义一下?

解决方案 »

  1.   

    ClassA的object为一个ClassB的实例或者其他类的实例,不一定是ClassB,但是事先知道的;
      

  2.   

    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()"; }
    }