3

我有以下接口及其实现类。

演示.java

public interface Demo{

 void showDemo();

}

DemoImpl.java

@Service
public class DemoImpl implements Demo{

  public void showDemo(){

       //To Do

    }

}

现在我有一个带有静态方法的类,它将在内部调用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 中是不允许的。

请参阅此stackoverflow链接以获得更好的理解。

进行以下更改:

public static Demo demo;
于 2013-11-13T06:29:07.130 回答
0

当你调用DemoStatic.callShowDemo()时,demo可能没有被实例化

于 2013-11-13T06:41:38.527 回答