java - OOD - 设置一次值,使其无法更改

标签 java oop information-hiding

我正在尝试了解信息隐藏的原理。假设我有一个车辆类,其中包含 getSpeed、setSpeed、getEngine、setEngine、getVIN、setVIN 等方法。为了强制执行信息隐藏,我不想为客户端类提供 setVIN 的能力,因为车辆只有一个 VIN (我可能错了)。我对如何使此类应用信息隐藏感到有点困惑。我不想将 setVIN 设为私有(private)。但是如何设置VIN一次并且之后不允许再次设置呢?或者我应该这样做吗?

最佳答案

信息隐藏意味着您不会暴露内部 VIN 字段以供外部直接修改。拥有 setter 并不违反隐藏原则,因为您可以控制字段的修改。

就您而言,如果您想确保 VIN 仅设置一次,最好的方法是在构造函数中设置它,然后删除 setVIN。

顺便说一句,虽然这是一个一般性问题(这很好),但如果您心中有一种特定的语言,那么它可能值得一提。例如,某些语言不允许非默认构造函数。在这种语言中,我会保留 setVIN,但让它在调用时检查 VIN 是否已设置。如果有,则忽略该调用,或引发异常。

关于java - OOD - 设置一次值,使其无法更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7659292/

相关文章:

html - 在手机上隐藏按钮

java - Java 封装与信息隐藏与抽象与数据隐藏的实际示例

architecture - 在 Go 中存储状态

java - 使用 java math.random 从一些用户输入选项中生成随机字符串?

java - 如何从实例初始化 block 调用注入(inject)的 bean 方法

java - 重写与 if 语句的性能

Java:创建新实例

python - 私有(private)名称修改功能

java - 如何使用多个填充段格式化 Java 字符串

java - 通过java在mysql中保存俄语