3

以下のインターフェースとその実装クラスがあります。

デモ.java

public interface Demo{

 void showDemo();

}

DemoImpl.java

@Service
public class DemoImpl implements Demo{

  public void showDemo(){

       //To Do

    }

}

現在、以下のように内部的に呼び出す静的メソッドを持つクラスが 1 つありshowDemo()ます。

DemoStatic.java

@Component
public class DemoStatic{

 @Autowired
 private Demo demo;



     public static void callShowDemo(){

       demo.showDemo(); //calling non static method from static method

       }

}

ここでは、静的メソッドから非静的メソッドを呼び出しています。私のデザインは正しいですか?または、デザインを変更する必要がありますか? 私に提案してください。

ありがとう!

4

4 に答える 4

4

このようにできます

@Component
public class DemoStatic {

 private static Demo demo;

 @Autowired
 public void setDemo(Demo d) {
     demo = d;
 }

  public static void callShowDemo(){
       demo.showDemo(); //calling static method from static method
  }

}
于 2013-11-13T06:37:28.243 に答える
3

いいえ、あなたのデザインは正しくありません。

private Demo demo;

である必要があります

private static Demo demo;

静的メソッドで非静的メンバーを使用することはできません

于 2013-11-13T06:28:59.973 に答える
0

上記のコードはまったくコンパイルされません。Java では許可されていない静的メソッドから非静的参照を参照しようとしています。

理解を深めるために、このスタックオーバーフローリンクを参照してください。

次の変更を行います。

public static Demo demo;
于 2013-11-13T06:29:07.130 に答える