2

私はこのインターフェースを持っています、

public interface IAnything {
  void m1();
  void m3();
}

そして、このインターフェースを実装する2つの抽象クラス:

public abstract class AbstractThing1 implements IAnything {
  public void m1() {}
  public void m3() {}
}

public abstract class AbstractThing2 implements IAnything {
  public void m1() {}
  public void m3() {}
}

私のコードのどこかで、 kindOfAbstractClassに応じて、他のジョブの中でも、function doSomething(kindOfAbstractClass)そのパフォーマンスを呼び出したいと思います。m1()m3()

どうすれば定義して呼び出すことができますdoSomething()か?私はこれをしましたが、機能していません。ありがとう

private <T extends IAnything> void doSomething(T kindOfAbstractClass) {
...
kindOfAbstractClass.m1();
kindOfAbstractClass.m3();
...
}

doSomething(AbstractThing1.class);
4

2 に答える 2

3

これを試して:

private void doSomething(IAnything  kindOfAbstractClass) {
...
kindOfAbstractClass.m1();
kindOfAbstractClass.m3();
...
}
于 2013-02-14T13:22:27.403 に答える
3

あなたの問題は、doSomethingへのパラメータとしてインスタンスではなくクラスタイプを提供していることです

以下の変更されたコードを見てください。

public class MyClass {


    void doIt(){
        doSomething(new ConcreteThing());       
    }

    private <T extends IAnything> void doSomething(T kindOfAbstractClass) {

            kindOfAbstractClass.m1();
            kindOfAbstractClass.m3();
    }

}


interface IAnything {
      void m1();
      void m3();
}

abstract class AbstractThing1 implements IAnything {
      public void m1() {}
      public void m3() {}
}


class ConcreteThing extends AbstractThing1{

}
于 2013-02-14T13:28:27.443 に答える