java - 如何将@UiField 字段设为私有(private)

标签 java gwt sonarqube visibility

Sonar 提示以下行:

@UiField
Button saveBtn;

Variable 'saveBtn' must be private and have accessor methods.

然而,当我将可见性修饰符设置为 private 时,IntelliJ IDEA 会提示:

@UiField 'saveBtn' should not be' private'

关于此冲突的最佳解决方案是什么(除了禁用此 Sonar 警告之外)?

最佳答案

GWT 的代码生成要求@UiFields 不是私有(private)的。在编译期间运行的 UIBinder 代码生成器将为您创建大量动态添加到您的项目中的 Java 代码。

此代码将直接访问字段并将小部件绑定(bind)到您的变量。此生成的代码未使用任何访问器,并且没有允许这样做的选项。 (实际上,这是完全有道理的,因为它掩盖了这些变量实际上已设置并使注释的语义清晰的事实)。

这就是要求背后的基本原理,即这些字段不允许是私有(private)的。因此,没有办法解决这个问题,只能禁用该类的 Sonar 警告。

关于java - 如何将@UiField 字段设为私有(private),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29566490/

相关文章:

java - 如何使用 Java 将包含代码和不同 namespace 的 XML 转换为对象?

java - GWT 应用程序的客户端 AOP 选项

gwt - 在 GWT 中使用 EnumSet 类

android - 无法解决 SonarQube 错误 "Make this line start at column 3"

maven - 在 Sonarcloud : Not authorized. 中使用 Travis CI 时出错请检查属性 sonar.login 和 sonar.password

java - Slf4j/logback - 在单独的文件中打印堆栈跟踪

ant 中的 Java 类型删除编译问题

java - 线程 "main"java.lang.NoClassDefFoundError 中出现异常无法初始化类 org.bytedeco.javacpp.avutil

gwt - 使用 GWT 进行 UI 设计

jenkins - 在 Jenkins 声明式管道中使用 waitForQualityGate