有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

不可变对象中的私有final与公共final字段(java)

有效Java中的第15项指出,建议在不可变对象中使用私有final字段而不是公共final字段,因为这可能会阻止在以后的版本中更改内部表示形式

我在理解突出显示的部分时遇到了问题-我看不出更改访问说明符会导致问题的情况,因为它已经是最终的。有人能举个例子吗


共 (2) 个答案

  1. # 1 楼答案

    这不仅仅是更改访问说明符的问题-您可能会更改有关内部表示的所有内容

    假设有三个byte值作为对象状态的一部分。您可以将它们存储在单个int字段中,也可以将它们存储在三个byte字段中。如果将字段(或多个字段)保持为私有,仅提供对状态的访问,则可以稍后更改实现。如果使用公共字段,则存储详细信息将成为类API的一部分,在不破坏兼容性的情况下无法更改

    如何您的类存储状态应该是一个实现细节,对外部世界隐藏,以实现未来的灵活性

    (这不仅仅是一个理论问题。例如,在我的Noda Time项目在。NET,我的v2。0版本将彻底更改日期和时间的存储详细信息。如果我将状态作为字段提供,那将是一个巨大的突破性变化。由于我改用了属性,除了性能改进之外,此更改对用户来说是完全透明的。)

  2. # 2 楼答案

    我不确定“稍后发布”部分,但保持变量私有变得特别重要,特别是在(可能)可变属性(如List)的情况下。虽然不能将引用重新分配给新列表,但如果列表是公共的,则始终可以从列表中添加或删除元素