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のReflectionAPIを使用して、任意のオブジェクトにクエリを実行し、m1またはという名前のメソッドがあるかどうかを確認して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 に答える