Meh*_*hdi 4 java enums types type-safety
我一直在阅读《Head First 面向对象的分析与设计》书,并且正在尝试学习 oop。
\n在本书的一页中,我读到了以下几行:
\n\n\n我们\xe2\x80\x99已经使应用程序变得不那么脆弱了。它\xe2\x80\x99现在不会那么容易被破坏,因为我们\xe2\x80\x99已经用这些枚举添加了类型安全和值安全。
\n
并且:
\n\n\n因此,您可以\xe2\x80\x99 拼写或错误键入枚举而不会出现编译器错误。它\xe2\x80\x99 是一种不仅获得类型安全,而且获得价值安全的好方法;您可以避免获得任何具有标准范围或合法值集的不良数据。
\n
我读过这个答案,但我很困惑,因为我认为答案是我们可以假设为价值安全的东西。
\n现在我的问题是类型安全和值安全之间有什么区别?\nEnum 如何为我们带来类型安全和值安全?请给我一些有关枚举中类型安全场景和值安全场景的示例。
\n谢谢。\n抱歉我的英语不好。
\n假设我们正在举办超级英雄大会。当他们注册时,我们会询问他们是属于 MARVEL 还是 DC。
类型安全只是检查允许用户输入什么类型的值。对于这样的方法:
void register(String name, String affiliation);
Run Code Online (Sandbox Code Playgroud)
用户只能输入字符串,不能输入整数,不能输入列表,不能输入文件。
但是,用户仍然可以输入任何字符串,该字符串可能是也可能不是有效的动作漫画组,或者我们不希望该组注册。“abcd”、“dummy”、“action_labs”等值仍然是有效字符串,但我们不希望 Action Labs 伙伴注册。类型安全:true,值安全:false。而且,Marvel或DC超级英雄不知道该放“marvel”还是“Marvel”,或者不小心写成“malver”或“marvl”等。即使我们用了,也很难找到有多少个sup与marvel一起equalsIgnoreCase()。
通过值安全,我们定义一个枚举:
enum ComicGroup{
MARVEL, DC
}
Run Code Online (Sandbox Code Playgroud)
并修改方法:
void register(String name, ComicGroup affiliation);
Run Code Online (Sandbox Code Playgroud)
用户现在只有两个选择ComicGroup.MARVEL或ComicGroup.DC。我们可以 100% 确定我们的价值观将始终是这些。类型安全:true,值安全:true。
| 归档时间: |
|
| 查看次数: |
86 次 |
| 最近记录: |