Android @SuppressWarnings在语句级别而不是方法级别

时间:2018-05-10 10:05:36

标签: android android-gradle android-lint deprecation-warning

TL; DR:Android的@SuppressWarnings("deprecation")或类似内容可以应用于单个语句,而不是整个方法吗?

我有一个使用弃用方法myMethod的方法ImageView.setAlpha()

public void myMethod(ImageView icon) { icon.setAlpha(0xFF); }

为避免在 Jelly Bean 及后续版本中使用已弃用的方法,同时提供向后兼容性,可以按如下方式重写方法myMethod

public void myMethod(ImageView icon) { 
  if (android.os.Build.VERSION.SDK_INT 
                                >= android.os.Build.VERSION_CODES.JELLY_BEAN)
     icon.setImageAlpha(0xFF);
  else 
     icon.setAlpha(0xFF);
}

此外,可以通过将方法myMethod添加到@SuppressWarnings("deprecation")来抑制Gradle / Lint生成的命令行警告。但是,这会抑制方法myMethod生成的所有弃用警告,而不仅仅是语句icon.setAlpha(0xFF)生成的单个警告。

我可以取消声明icon.setAlpha(0xFF)生成的单个弃用警告,而不是取消方法myMethod生成的所有弃用警告吗?

1 个答案:

答案 0 :(得分:3)

如果您使用的是Android Studio,则可以按如下方式实现:

 //noinspection deprecation
 icon.setAlpha(0xFF);

供将来参考:可以在Android-Studio中轻松生成正确的格式,如下所示:

  1. 在发出警告的声明中按alt + Enter。
  2. 然后展开选项Deprecated API usage选项
  3. 点击Suppress for statement
  4. 以下图片显示了该过程:

    enter image description here

    在您的情况下,因为您没有使用IDE:

    • 不幸的是,在方法体层没有直接的方法来实现它。由于您已经将已弃用的部分移动到单个方法中并使用@SuppressWarnings标记,因此这应该是您可以实现的最佳方式。
    • 有些帖子声称通过使用完全限定的类名而不是import来解决它。但看起来这个问题已在Java 9中得到修复。因为当前流行的java版本的android是8.x,这应该在短期内有所帮助。您可以参考此SO了解更多详情