记录旁边的主要区别是什么:
Database database = new Database(config);
User user = new User(database);
和
User user = new User(new Database(config));
我是否正确理解第二个只是第一个的缩写,可以在我不打算调用任何database
方法时使用?
答案 0 :(得分:2)
在大多数情况下,确实没有多大区别。但是有一些不同之处:
在第一种情况下,您可以通过Database
变量访问该database
实例,而在第二种情况下,您必须从User
实例获取该实例user
引用,以便直接对其执行任何操作。如果您只是使用User
构建Database
然后直接对其执行任何操作,那显然无关紧要。
如果User
引用的user
实例由于某种原因不再引用Database
对象(例如,它仅在其构造函数中使用它,或其他一些调用使它将引用它的成员变量设置为null
),并且database
仍然存在,然后程序中仍然存在对该Database
对象的引用,并且GC可以& #39;收集它。如果您正在为每个对象创建单独的成员变量而不是使用局部变量或者如果您单独传递对象,并且如果您不是这样做,那么这主要是一个问题要直接访问Database
,那么为它设置单独的成员变量或传递它是没有意义的。
所以,实际上,唯一的区别与单独引用Database
的后果有关,如果您对Database
所做的一切正构建User
1}},然后拥有database
变量是完全没必要的。