Dil*_*Dil 0 java runtime compile-time
根据这篇关于 Java Enum 的文章,运行时安全可以通过使用==运算符来比较状态和阻止来实现NullPointerException。
if(testPz.getStatus() == Pizza.PizzaStatus.DELIVERED);
Run Code Online (Sandbox Code Playgroud)
此外,compile-time-safety虽然从逻辑上证明比较是错误的,但通过使用运算符可以避免此问题==。
if(testPz.getStatus() == TestColor.GREEN);
Run Code Online (Sandbox Code Playgroud)
你能告诉我什么是 Java 中的
compile-time-safety和吗?runtime-safety
如果可以的话请给我一个小例子。
一般来说,编译时安全意味着你的代码遵循语言的规则,而运行时安全意味着你的代码做正确的事情。不同的语言提供不同的规则集,从而提供不同的安全保证。
编译时安全意味着编译器可以分析您的代码并保证不存在某些类型的错误。在Java中,一个常见的例子是类型安全(保证类型变量中的对象List是某种列表实现)。有些语言,例如 JVM 上的 Kotlin,也可以保证不会发生空指针异常,因为可以识别可空变量和非空变量,并且需要显式检查。
然而,编译时安全性也有其局限性;例如,你可以在Java中使用强制转换来明确告诉编译器“我知道这里的对象是某种类型,即使你无法证明它”,如果你错了,你可以得到一个ClassCastExceptionwhen你运行该程序。
您链接到的文章正在谈论我的第二个例子,零安全性。在 Java 中,引用类型的变量可以具有 value null,该值实际上并不引用真实实例,如果您尝试调用该变量的方法,您会得到一个NullPointerException. 在此示例中,如果您有一个 enum Status,那么如果您调用statusVariable.equals(VALUE),那么如果 is null ,您将得到一个异常statusVariable: 该表达式是编译时安全的,但不是运行时安全的,因为 Java 不保证 null 值。相反,==与 null 值一起使用是安全的,因此即使您的变量为 null,您也会得到结果false而不是异常。