【问题标题】:How do I suppress warning "Synchronization on a non-final field"如何抑制警告“非最终字段上的同步”
【发布时间】:2016-03-09 04:29:25
【问题描述】:

是否可以抑制这种警告?

注意:我不是要抑制所有警告(例如 @SuppressWarnings("all") ),而只是要抑制提到的类型。

【问题讨论】:

  • 我建议你把这个领域定为最终。使用非最终字段容易出错。注意:这不是 Java 警告,因此取决于您使用的工具。
  • @PeterLawrey 我正在使用 Android Studio。我正在阅读一本与 android 游戏相关的书,他们使用了一个非最终字段,他们会不时更新。此外,该字段在访问的两个类中都是同步的,因此它似乎是安全的。
  • 更新:该字段只设置一​​次,理论上可以通过构造函数注入并设置为final,但是我看到他们在我继承的接口中有一个setter方法作为约定。

标签: java


【解决方案1】:

对于 Intellij,将此注释放在有警告的类上

@SuppressWarnings("SynchronizeOnNonFinalField")

This 将我带到用于抑制的标签,反复试验导致我将其放在类而不是字段或同步语句上。 :-P

【讨论】:

  • 注意:我在 Android Studio 中执行此操作...我假设它也适用于普通 Java 项目的 Intellij。
  • 它适用于两者 - 测试它。也感谢您提供帮助您找到注释标签的链接
【解决方案2】:

如果您使用的是 IntelliJ,它看起来像是 @SuppressWarnings("SynchronizationOnLocalVariableOrMethodParameter")。否则视情况而定。您可能会在此处的列表中找到答案:What is the list of valid @SuppressWarnings warning names in Java?

请注意,警告通常是正确的。在大多数情况下,您应该只使用 final 字段。

【讨论】:

  • 我使用的是 Android Studio,但应该是一样的。我对这两种方法都进行了测试,但您上面提到的抑制方法不起作用。
【解决方案3】:

这对你有帮助,

允许所有值(忽略未识别的值)。名单 识别的那些是特定于编译器的。

Java 语言需要'unchecked' 和'deprecation' 规范,因此应该对所有编译器都有效。对于孙氏 编译器,运行 'javac -X' 会给出所有被识别的值的列表 那个版本。对于 1.5.0_17,列表似乎是:

all deprecation unchecked fallthrough path serial finally

请参考这里,这里也讨论过What is the list of valid @SuppressWarnings warning names in Java?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-12-27
    • 1970-01-01
    • 1970-01-01
    • 2013-01-08
    • 2019-02-25
    • 2011-03-18
    • 1970-01-01
    相关资源
    最近更新 更多