分配给实例变量时 SuppressWarnings 注释

问题描述

我正在使用(并且无法更改)的库将原始 Map 返回给我,因此我想取消有关未经检查的强制转换的警告。但是,当我在实例变量上尝试它时,它似乎不起作用。

我已经列举了下面的案例,为了简洁起见,即使我单独测试了它们,也将它们组合成一个代码示例。

class Foo {
  @SuppressWarnings("unchecked") //doesn't work
  private Map<String,String> map;

  @SuppressWarnings("unchecked") //works
  private void doSomething() {
    @SuppressWarnings("unchecked") //Syntax error
    this.map = Library.getMap();
  }
}

我可以抑制警告的最具体位置是什么?我不想在整个方法上都这样做,但这是它目前对我有用的唯一地方。

解决方法

您希望在出现问题时抑制警告,问题在 doSomething

this.map = Library.getMap();

您无法抑制赋值本身,因此您需要转到外部作用域,即 method or the class

出于风格的考虑,程序员应该始终在最有效的嵌套最深的元素上使用此注释。如果您想在特定方法中抑制警告,您应该注释该方法而不是它的类。

如果你的赋值是在初始化中,你可以取消它:

@SuppressWarnings("unchecked" )
private Map<String,String> map = Library.getMap(); 

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...