mirror of
https://github.com/sjsdfg/effective-java-3rd-chinese.git
synced 2025-03-03 13:50:57 +08:00
27. 消除非检查警告
This commit is contained in:
parent
6fd72fa646
commit
d6f5807a98
@ -24,9 +24,9 @@ Venery.java:4: warning: [unchecked] unchecked conversion
|
||||
Set<Lark> exaltation = new HashSet<>();
|
||||
```
|
||||
|
||||
但一些警告更难以消除。 本章充满了这种警告的例子。 当你收到需要进一步思考的警告时,坚持不懈! 尽可能地消除每一个未经检查的警告。 如果你消除所有的警告,你可以放心,你的代码是类型安全的,这是一件非常好的事情。 这意味着在运行时你将不会得到一个 `ClassCastException` 异常,并且增加了你的程序将按照你的意图行事的信心。
|
||||
但一些警告更难以消除。 本章充满了这种警告的例子。 当你收到需要进一步思考的警告时,坚持不懈! **尽可能地消除每一个未经检查的警告。** 如果你消除所有的警告,你可以放心,你的代码是类型安全的,这是一件非常好的事情。 这意味着在运行时你将不会得到一个 `ClassCastException` 异常,并且增加了你的程序将按照你的意图行事的信心。
|
||||
|
||||
如果你不能消除警告,但你可以证明引发警告的代码是类型安全的,那么(并且只能这样)用 `@SuppressWarnings(“unchecked”)` 注解来抑制警告。 如果你在没有首先证明代码是类型安全的情况下压制警告,那么你给自己一个错误的安全感。 代码可能会在不发出任何警告的情况下进行编译,但是它仍然可以在运行时抛出 `ClassCastException` 异常。 但是,如果你忽略了你认为是安全的未经检查的警告(而不是抑制它们),那么当一个新的警告出现时,你将不会注意到这是一个真正的问题。 新出现的警告就会淹没在所有的错误警告当中。
|
||||
**如果你不能消除警告,但你可以证明引发警告的代码是类型安全的,那么(并且只能这样)用 `@SuppressWarnings(“unchecked”)` 注解来抑制警告。** 如果你在没有首先证明代码是类型安全的情况下压制警告,那么你给自己一个错误的安全感。 代码可能会在不发出任何警告的情况下进行编译,但是它仍然可以在运行时抛出 `ClassCastException` 异常。 但是,如果你忽略了你认为是安全的未经检查的警告(而不是抑制它们),那么当一个新的警告出现时,你将不会注意到这是一个真正的问题。 新出现的警告就会淹没在所有的错误警告当中。
|
||||
|
||||
`SuppressWarnings` 注解可用于任何声明,从单个局部变量声明到整个类。 始终在尽可能最小的范围内使用 `SuppressWarnings` 注解。 通常这是一个变量声明或一个非常短的方法或构造方法。 切勿在整个类上使用 `SuppressWarnings` 注解。 这样做可能会掩盖重要的警告。
|
||||
|
||||
@ -73,7 +73,7 @@ public <T> T[] toArray(T[] a) {
|
||||
|
||||
所产生的方法干净地编译,并最小化未经检查的警告被抑制的范围。
|
||||
|
||||
每当使用 `@SuppressWarnings(“unchecked”)` 注解时,请添加注释,说明为什么是安全的。 这将有助于他人理解代码,更重要的是,这将减少有人修改代码的可能性,从而使计算不安全。 如果你觉得很难写这样的注释,请继续思考。 毕竟,你最终可能会发现未经检查的操作是不安全的。
|
||||
**每当使用 `@SuppressWarnings(“unchecked”)` 注解时,请添加注释,说明为什么是安全的。** 这将有助于他人理解代码,更重要的是,这将减少有人修改代码的可能性,从而使计算不安全。 如果你觉得很难写这样的注释,请继续思考。 毕竟,你最终可能会发现未经检查的操作是不安全的。
|
||||
|
||||
总之,未经检查的警告是重要的。 不要忽视他们。 每个未经检查的警告代表在运行时出现 `ClassCastException` 异常的可能性。 尽你所能消除这些警告。 如果无法消除未经检查的警告,并且可以证明引发该警告的代码是安全类型的,则可以在尽可能小的范围内使用 `@SuppressWarnings(“unchecked”)` 注解来禁止警告。 记录你决定在注释中抑制此警告的理由。
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user