我有一个关于java应用程序中的一些代码的问题
这两个定义有什么区别我有一个关于java应用程序中的一些代码的问题,java,static,private,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) { } pr
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;
}
}
哪个更好?我认为你的代码错了。此方法应该在其他类中。应该是
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的回答很容易理解,不需要认真的编码/框架知识-
The best definition I've found so far is one by James Shore:
“依赖注入”是一个25美元的术语,用于表示5美分的概念。依赖注入意味着为对象提供实例变量。
马丁·福勒的一篇文章可能也很有用
依赖项注入基本上是提供对象所需的对象(其依赖项),而不是让对象自己构造它们。这是一种非常有用的测试技术,因为它允许模拟或删除依赖项
依赖项可以通过多种方式注入对象(如构造函数注入或setter注入)。甚至可以使用专门的依赖注入框架(例如Spring)来实现这一点,但它们肯定不是必需的。您不需要那些框架来进行依赖注入。显式实例化和传递对象(依赖项)与框架注入一样好。您知道,如果不使用
new
关键字,就不会创建对象,对吗?因此,初始化main2
本身只会将其保留为null
?除了非描述性标题(请阅读)之外,main
的初始化效果更好。为什么?因为main2
不会做您期望的事情。。。(试一试)。看起来您正在混淆创建类的实例和从单例或类似对象获取实例。main()方法也是不相关的,这只是您的入口点。您的意思是要编写一个默认构造函数吗?第一个是创建(并分配)一个新实例;第二种方法只是分配一个方法返回的内容(在这种情况下是分配给的字段,因此它实际上是一个无操作)。我认为您的//构造函数注入方法需要使用a
而不是main2。@Jamie犯了一个错误。更正。