sonarQube 引发 Make a static final constant or non-public 并在需要时在 JNA 结构上提供访问器
sonarQube raises Make a static final constant or non-public and provide accessors if needed on JNA structure
我创建了以下在我的项目上下文中工作的 JNA 结构:
@FieldOrder({ "string", "stringSize" })
public static class stringStruct extends Structure {
public static class ByReference extends stringStruct implements Structure.ByReference {
}
public static class ByValue extends stringStruct implements Structure.ByValue {
}
public String string;
public int stringSize;
}
我对我的代码启动了 sonarQube 分析,sonarQube 引发了以下错误:
“使 stringSize 成为静态最终常量或非 public,并在需要时提供访问器。”
这很奇怪,因为我的结构中有两个字段,只有一个字段引发了这样的问题。
无论如何,如果我理解正确,关于这个问题我应该做类似的事情来解决 stringSize 字段的问题:
@FieldOrder({ "string", "stringSize" })
public static class stringStruct extends Structure {
public static class ByReference extends stringStruct implements Structure.ByReference {
}
public static class ByValue extends stringStruct implements Structure.ByValue {
}
public String string;
private int stringSize;
public int getStringSize() {
return stringSize;
}
public void setStringSize(int stringSize) {
this.stringSize = stringSize;
}
}
但这不是 JNA 的工作方式,不是吗?
因此,我可以假设我使用的 sonarQube 标准有问题吗?而不是我的实现。
JNA 依赖 public
修饰符来访问结构的 class 字段,这些字段通过反射访问。
通常不使用访问器方法,除非是为了方便,例如,如果您有一个 byte[]
或 char[]
字段打算是文本,您可以添加一个 getFooString()
访问器使获取字符串更容易的方法。
所以是的,您将不得不忽略 and/or 抑制这些声纳警告,因为它们通常是不合规的。一般来说,JNA 映射也倾向于保留字段名称的大小写,Sonar 也抱怨这不符合标准!这并不是 Sonar 中的缺陷——这些通常是您其他代码的良好规则。这不是 JNA 的工作方式。
出于以下几个原因,我尝试将所有 JNA 代码放在自己的包中:
- 它可以更轻松地从某些 CI 工具(例如 Sonar
中排除包
- 迁移到 Java 模块系统 (JPMS) 时,您需要
open
将具有 JNA 结构的包 com.sun.jna
用于结构 class 以反省的眼光看待他们。
- 它使您以后可以更轻松地浏览代码并找到可以为 JNA 项目中的用户映射做出贡献并回馈社区的东西!
我创建了以下在我的项目上下文中工作的 JNA 结构:
@FieldOrder({ "string", "stringSize" })
public static class stringStruct extends Structure {
public static class ByReference extends stringStruct implements Structure.ByReference {
}
public static class ByValue extends stringStruct implements Structure.ByValue {
}
public String string;
public int stringSize;
}
我对我的代码启动了 sonarQube 分析,sonarQube 引发了以下错误: “使 stringSize 成为静态最终常量或非 public,并在需要时提供访问器。” 这很奇怪,因为我的结构中有两个字段,只有一个字段引发了这样的问题。
无论如何,如果我理解正确,关于这个问题我应该做类似的事情来解决 stringSize 字段的问题:
@FieldOrder({ "string", "stringSize" })
public static class stringStruct extends Structure {
public static class ByReference extends stringStruct implements Structure.ByReference {
}
public static class ByValue extends stringStruct implements Structure.ByValue {
}
public String string;
private int stringSize;
public int getStringSize() {
return stringSize;
}
public void setStringSize(int stringSize) {
this.stringSize = stringSize;
}
}
但这不是 JNA 的工作方式,不是吗? 因此,我可以假设我使用的 sonarQube 标准有问题吗?而不是我的实现。
JNA 依赖 public
修饰符来访问结构的 class 字段,这些字段通过反射访问。
通常不使用访问器方法,除非是为了方便,例如,如果您有一个 byte[]
或 char[]
字段打算是文本,您可以添加一个 getFooString()
访问器使获取字符串更容易的方法。
所以是的,您将不得不忽略 and/or 抑制这些声纳警告,因为它们通常是不合规的。一般来说,JNA 映射也倾向于保留字段名称的大小写,Sonar 也抱怨这不符合标准!这并不是 Sonar 中的缺陷——这些通常是您其他代码的良好规则。这不是 JNA 的工作方式。
出于以下几个原因,我尝试将所有 JNA 代码放在自己的包中:
- 它可以更轻松地从某些 CI 工具(例如 Sonar 中排除包
- 迁移到 Java 模块系统 (JPMS) 时,您需要
open
将具有 JNA 结构的包com.sun.jna
用于结构 class 以反省的眼光看待他们。 - 它使您以后可以更轻松地浏览代码并找到可以为 JNA 项目中的用户映射做出贡献并回馈社区的东西!