1

考虑以下类

Class A{
    public void m1(){
          System.out.println("test in A.m1()");
    }

    public void m2(){
          //do something a
    }
}


Class B{
    public void m1(){
          //do something b
    }

    public void m2(){
          //do something b
    }
}


Class C{
    public void m1(){
          //do something c
    }

    public void m2(){
          //do something c
    }
}

Class T{
    public void m3(Object obj1){
          obj1.m1();
    }

    public void m4(Object obj1){
          A a=new A();
          m3(a);
    }


}

所以现在我的问题是,有什么方法可以将打开的对象发送到一个方法,该方法将检测它是什么类型的对象并调用该对象类的方法。在这个例子中,我希望看到输出:"test in A.m1()"

4

1 回答 1

3

您可以使用 Java 的反射 API来查询任意对象以查看它是否具有名为m1or的方法m2,然后调用它。但这很丑陋。

有什么可以阻止您使用界面的吗?下面的示例(其中“...”表示您将放置特定实现的位置):

interface MyMethods {
  public void m1();
  public void m2();
}

class A implements MyMethods {
  public void m1() { ... }
  public void m2() { ... }
}

class B implements MyMethods {
  ...
}

class C implements MyMethods {
  ...
}

class T {
  public void m3(MyMethods obj1) {
    obj1.m1();
  } 

  public void m4(Object obj1) {
    // Call m3 three times with different object instance types...
    A a = new A();
    m3(a);
    B b = new B();
    m3(b);
    C c = new C();
    m3(c);
  }
}
于 2012-12-22T01:45:56.737 回答