【发布时间】:2019-01-30 14:38:17
【问题描述】:
我有一个关于最佳设计实践的问题。我一直在尝试在我的项目中构建更多不可变的组件,因为我读到它们从长远来看更容易维护,并且想对此进行测试。
当你有一个具有不可变数据成员的类时,说
public/private final int importantNumber = 3;
是否仍应将 int 声明为私有并赋予访问器方法,或者因为它的 final,允许直接访问并将其公开有什么困难?由于您无法对其进行更改,因此我认为将其公开没有任何问题。
在我的例子中,不可变对象是使用传递给它的值创建的,然后会从数据库中自行填充其他对象,一切都是最终的。
或者这仅仅是一个偏好问题,会引发一场宗教战争?由于有很多关于从类内部访问数据成员的问题,我想明确表示我是在向另一个试图获取值的外部类询问。
【问题讨论】:
-
访问器方法有可能包含更多逻辑(计算等),而字段没有,使用方法还允许您重命名字段(因为它仅在内部使用)
-
我总是使用 getter,因为它可以在单元测试中轻松模拟。
-
@NeplatnyUdaj 但这可能是“包保护”。如果它是公开的,您将无法控制还有谁会调用它,至少在 Java 9 和模块之前是这样。
-
@GhostCat 你的观点已经死了,我只考虑了这里和我,我没有考虑过以后谁可能会使用代码。目标是易于维护,所以虽然我对返回值并且什么都不做的 getter 感到畏缩,但它们确实有自己的位置。太糟糕了,没有可以包含的关键字让我声明一个伪作用域和一个 getter 的名称。私有int重要编号(公共getImportantNumber)= 3;然后,如果需要,我可以稍后定义 getter。
标签: java immutability private public accessor