-1

我正在看一些示例,我想深入了解this.repository=repository在构造函数中创建对象或使用 创建对象的区别Repository repository = new Repository()

public class ServiceImpl implements Service{
  private final Repository repository
  public ServiceImpl (Repository repository)
      this.repository=repository     
 }
4

5 回答 5

1
this.repository= new Repository()

创建一个存储库对象并将其分配给实例变量,该变量可以从类的任何位置访问

Repository repository = new Repository()

它将创建一个局部变量,并且只能在该方法内部访问

于 2013-09-14T09:18:09.353 回答
1

在第一种情况下,存储库对象已在 ServiceImpl 之外创建并传入。在第二种情况下,ServiceImpl 正在创建存储库对象。

哪个正确取决于您是否认为 ServiceImpl 对象应该控制存储库的创建。例如,如果传入存储库,则调用代码可以传入存储库的子类,而不是存储库本身。

于 2013-09-14T09:18:54.120 回答
0

在构造函数中

public ServiceImpl (Repository repository)
  this.repository= new Repository();
}

要创建一个对象,它的构造函数应该与new关键字一起使用。这就是语言语义的设计方式。

你不能创建这样的对象this.repository = repository。它只是分配对象引用存储库引用的现有对象。如果未初始化,则为 null

于 2013-09-14T09:20:51.857 回答
0

该行this.repository=repository不会创建新Repository对象,它所做的只是将parameter存储库分配给实例变量repository

要创建一个新Repository对象,您需要调用constructor

Repository r = new Repository()

于 2013-09-14T09:16:31.807 回答
0

Repository repository = new Repository()声明一个引用处理程序存储库,它指向一个新创建的 Repository 对象

this关键字是指调用某些方法的类的对象。

注意:- this.repository=repository不是对象创建。

于 2013-09-14T09:17:59.653 回答