我对Java应用程序中的某些代码有疑问

时间:2019-09-16 15:14:18

标签: java static private

这两个定义有什么区别?

public class MainClass {
    //definition one
    private static MainClass main = new MainClass();
    //definition two
    private static MainClass main2 = MainClass.getMain2();

    public static void main(String[] args) {

    }

    private static MainClass getMain2() {
        return main2;
    }

}

哪个更好?

1 个答案:

答案 0 :(得分:1)

我认为您的代码是错误的。此方法应该在其他类中。应该是

private static MainClass getMain2() {
    return new MainClass();
}

这称为依赖注入。

您的代码应如下所示

public class MainClass {
    //definition one
    private static MainClass main = new MainClass();
    //definition two  
    private static MainClass main2 = MainClass.getMain2();

    public static void main(String[] args) {

    }

    //constructor injection
    private static MainClass( MainClass a) {
       this.main2  = a;
    }
    //Or in place of constructor injection you can use Setter injection
    public static setMain2( MainClass a) {
        this.main2  = main2;
    }

@Thiago Arrais在What is dependency injection?上回答的问题很容易理解,无需具备丰富的编码/框架知识-

The best definition I've found so far is one by James Shore:

“依赖注入”是一个5美分概念的25美元术语。依赖注入意味着为对象提供实例变量。

马丁·福勒(Martin Fowler)的一篇文章可能也很有用。

依赖注入基本上是提供对象需要的对象(其依赖),而不是由它自己构造它们。这是一种非常有用的测试技术,因为它可以模拟或消除依赖关系。

可以通过多种方式将依赖项注入到对象中(例如构造函数注入或setter注入)。甚至可以使用专门的依赖项注入框架(例如Spring)来做到这一点,但是肯定不是必需的。您不需要那些框架具有依赖项注入。显式实例化和传递对象(依赖项)与通过框架进行注入一样好。