类型安全和值安全之间的区别

问题描述 投票:0回答:2

我一直在阅读 Head First 面向对象分析与设计 书,我正在尝试学习 oop。

在本书的一页中,我读过以下几行:

我们一直在降低应用程序的脆弱性。不会发生 现在很容易破解,因为我们添加了类型安全性和价值 这些枚举的安全性。

还有:

因此,如果拼写错误或输入错误的枚举,则不会出现编译器错误。这是不仅获得类型安全,而且获得价值的好方法 安全;您可以避免获得任何有问题的数据 标准范围或一组合法值。

我读过这个答案,我很困惑,因为我认为答案是我们可以假设为价值安全的东西。

现在我的问题是类型安全和值安全有什么区别? Enum如何为我们带来类型安全值安全?请给我一些关于枚举中的类型安全场景和值安全场景的示例。

谢谢。 抱歉我的英语不好。

java types enums type-safety
2个回答
0
投票

假设我们正在举办超级英雄大会。当他们注册时,我们会询问他们是属于 MARVEL 还是 DC。

类型安全只是检查允许用户输入什么类型的值。对于这样的方法:

void register(String name, String affiliation);

用户只能输入字符串,不能输入整数,不能输入列表,不能输入文件。

但是,用户仍然可以输入任何字符串,该字符串可能是也可能不是有效的动作漫画组,或者我们不希望该组注册。 “abcd”、“dummy”、“action_labs”等值仍然是有效字符串,但我们不希望 Action Labs 好友注册。类型安全:true,值安全:false。而且,Marvel 或 DC 超级英雄不知道该放“marvel”还是“Marvel”,或者不小心写成“malver”或“marvl”等。即使我们用

 也很难找到有多少个超级英雄是 Marvel 的。 equalsIgnoreCase()

通过价值安全,我们定义一个枚举:

enum ComicGroup{
    MARVEL, DC
}

并修改方法:

void register(String name, ComicGroup affiliation);

用户现在只有两个选项

ComicGroup.MARVEL
ComicGroup.DC
。我们可以 100% 确定我们的价值观将始终是这些。类型安全:true,值安全:true。


0
投票

据我了解,类型安全是指您无法将错误类型的值放入变量,例如:

整数a =“文本”;

你不能这样做,因为你不能(编译器错误)将字符串赋值给整数变量。为了防止这种类型的事情发生,Java 已经是类型安全的了。

例如 JavaScript 不是类型安全的,因为您没有为变量分配类型。

var a =“文本”

a 的类型变成了 String,因为你给它分配了一个 Text 值。

更深入地了解此类型的安全性答案

重视安全

检查您在类型安全语言上分配的值时。在这种情况下,使用枚举可以确保可能的值对于管理变量是有效的。如果您使用枚举并说可能的值为 [1,2,3],则您无法分配 4 或“4”来破坏您的代码或变量的类型。

© www.soinside.com 2019 - 2024. All rights reserved.