java - @SuppressWarnings ("unchecked") 的位置是否重要?

标签 java unchecked

我用过 @SuppressWarnings("unchecked")喜欢:

class SomeClass {
  public static void main(String [] args) {
    Vector v = new Vector();
    @SuppressWarnings("unchecked")
    v.addElement(new Integer(1_000_000));
    // ...        

在使用 javac 8.0 版进行编译时,出现以下错误:
error: <identifier> expected
        v.addElement(new Integer(1_000_000));

插入符号 (^) 指向 addElement 的左括号方法和另一条错误消息,提示缺少分号 (;)。第二条消息在 addElement 的右括号附近显示了插入符号.

但是,当我移动 @SuppressWarnings("unchecked") 时上方class SomeClass{ , 行,如:
@SuppressWarnings("unchecked")
class SomeClass {

两个错误消息都会自动消失。这让我不知所措。是@SuppressWarnings("unchecked")的定位这么挑剔?

最佳答案

您不得放置类似 @SuppressWarnings("unchecked") 的注释。在声明上,但仅在声明上。

这就是编译器不理解第一个变体的原因:

@SuppressWarnings("unchecked")
v.addElement(new Integer(1_000_000));

这在那里是非法的,编译器不会理解它。

如果你想缩小范围,你可以把它放在方法上:
@SuppressWarnings("unchecked")
public static void main(String [] args) {
    Vector v = new Vector();
    v.addElement(new Integer(1_000_000));

因此,只有 main 的警告方法将被忽略,但不会被整个类忽略。

你甚至可以把它放在变量声明上,但永远不要放在语句上:
@SuppressWarnings("unchecked")
Vector v = new Vector();

然而,正如 GhostCat 所指出的,在这种情况下,最好只对 vector 进行泛化而不是忽略警告。

关于java - @SuppressWarnings ("unchecked") 的位置是否重要?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39366263/

相关文章:

java - 使用 openapi4j 解析包含 jar 内引用的 Swagger

javascript - jquery 通过操作检查和取消选中所有内容

c# - 试图在编译时分配一个大数字

Java unchecked/checked 异常说明

java - Employee 和 EmployeeDemo,如何获得两个独立员工的以下输出?

java - Criteria.uniqueResult 返回 null,但没有抛出错误

java - 在java中将String类型的二进制数转换为位

java - 如何使用 Apache POI 从 excel (xlsx) 文件读取整数单元格值作为字符串而不进行任何更改

java - gui 应用程序中的异常处理

javascript - 如果未选中一个子项,请取消选中父项复选框