Java 自动查找隐式类型转换(自动装箱/自动取消装箱)
我继承了一个项目,其中不一致地使用“相同”的实例变量。例如,在某些类中,它们存储为原语Java 自动查找隐式类型转换(自动装箱/自动取消装箱),java,netbeans,sonarlint,Java,Netbeans,Sonarlint,我继承了一个项目,其中不一致地使用“相同”的实例变量。例如,在某些类中,它们存储为原语float: 类原语{ float-myPrimitiveFloat; ... } ..在其他类中,当“相同”变量被传递到构造函数中时,该值存储为盒式浮点: 类装箱{ 浮动myBoxedFloat; ... 盒装(浮动myFloat,…){ this.myFloat=myFloat; } } ..然后从Primitive中的方法调用新装箱(myPrimitiveFloat,…) 我在这里使用float/fl
float
:
类原语{
float-myPrimitiveFloat;
...
}
..在其他类中,当“相同”变量被传递到构造函数中时,该值存储为盒式浮点:
类装箱{
浮动myBoxedFloat;
...
盒装(浮动myFloat,…){
this.myFloat=myFloat;
}
}
..然后从Primitive
中的方法调用新装箱(myPrimitiveFloat,…)
我在这里使用float
/float
作为示例,但这种不一致也可能是其他任何一对:byte
/byte
,short
/short
,int
/Integer
,long
double
,boolean
/boolean
和char
/char
我发现,对于“相同”变量,如果类型是原语float
或盒装类型float
,则是一致的,我正在寻找一种检查源代码的方法,而不必单独访问每个文件
举个例子,我想寻找的是当一个float
被传递时,当一个float
是必需的,反之亦然。这可能是(列表并非详尽无遗,可能还有其他内容):
- 使用与构造函数中的类型相反的类型变量调用构造函数(
newmyclass(…)
)
- 当传递给setter的参数与方法的参数相反时,如
setMyVaribale(..)
- 当getter返回与它得到的实例变量类型相反的值时。类似于
float getMyValue()
类将myValue
存储为float
我的本地Java编辑器/工具包是NetBeans,其内部类型检查器是Sonar lint。我不愿意使用公司认为“不标准”的软件。这包括EclipseIDE
开发环境是Java版本11
有没有办法配置Sonar lint或NetBeans来检测这类东西,或者在使用Maven/Gradle构建时可能检测到它
生成一个日志文件,作为审计审查的输入也很有用。一个可能的解决方案是在POM文件中添加一个报告
部分。使用mvn站点
(可能需要一段时间)构建时,将生成一个HTML页面(target/site/index.HTML
)或一个描述问题的XML文件(target/spotbugsXml.XML
)
任何带有模式Bx:
的标记都表明使用了可疑的编程问题,从spotbugs的角度来看,使用了装箱/拆箱
XML文件可以用作审计跟踪审查的输入
下面描述的报告部分还调用了一些其他静态代码分析工具,这些工具还可能指出可能需要解决的其他问题
<reporting>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-project-info-reports-plugin</artifactId>
<version>${maven-project-info.version}</version>
<reportSets>
<reportSet>
<reports>
<report>index</report>
<report>ci-management</report>
<report>dependencies</report>
<report>dependency-convergence</report>
<report>dependency-info</report>
<report>dependency-management</report>
<report>distribution-management</report>
<report>issue-management</report>
<report>licenses</report>
<report>mailing-lists</report>
<report>modules</report>
<report>plugin-management</report>
<report>plugins</report>
<report>scm</report>
<report>summary</report>
<report>team</report>
</reports>
</reportSet>
</reportSets>
</plugin>
<plugin>
<groupId>com.github.spotbugs</groupId>
<artifactId>spotbugs-maven-plugin</artifactId>
<version>4.2.0</version>
<configuration>
<effort>Max</effort>
<threshold>low</threshold>
<xmlOutput>true</xmlOutput>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-pmd-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<reportSets>
<reportSet>
<id>html</id>
<configuration>
<doctitle>My API for ${project.name} ${project.version}</doctitle>
<windowtitle>My API for ${project.name} ${project.version}</windowtitle>
</configuration>
<reports>
<report>javadoc</report>
</reports>
</reportSet>
<reportSet>
<id>test-html</id>
<configuration>
<testDoctitle>My Test API for ${project.name} ${project.version}</testDoctitle>
<testWindowtitle>My Test API for ${project.name} ${project.version}</testWindowtitle>
</configuration>
<reports>
<report>test-javadoc</report>
</reports>
</reportSet>
</reportSets>
</plugin>
</plugins>
</reporting>
org.apache.maven.plugins
一种可能的解决方案是在POM文件中添加一个报告
部分。使用mvn站点
(可能需要一段时间)构建时,将生成一个HTML页面(target/site/index.HTML
)或一个描述问题的XML文件(target/spotbugsXml.XML
)
任何带有模式Bx:
的标记都表明使用了可疑的编程问题,从spotbugs的角度来看,使用了装箱/拆箱
XML文件可以用作审计跟踪审查的输入
下面描述的报告部分还调用了一些其他静态代码分析工具,这些工具还可能指出可能需要解决的其他问题
<reporting>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-project-info-reports-plugin</artifactId>
<version>${maven-project-info.version}</version>
<reportSets>
<reportSet>
<reports>
<report>index</report>
<report>ci-management</report>
<report>dependencies</report>
<report>dependency-convergence</report>
<report>dependency-info</report>
<report>dependency-management</report>
<report>distribution-management</report>
<report>issue-management</report>
<report>licenses</report>
<report>mailing-lists</report>
<report>modules</report>
<report>plugin-management</report>
<report>plugins</report>
<report>scm</report>
<report>summary</report>
<report>team</report>
</reports>
</reportSet>
</reportSets>
</plugin>
<plugin>
<groupId>com.github.spotbugs</groupId>
<artifactId>spotbugs-maven-plugin</artifactId>
<version>4.2.0</version>
<configuration>
<effort>Max</effort>
<threshold>low</threshold>
<xmlOutput>true</xmlOutput>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-pmd-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<reportSets>
<reportSet>
<id>html</id>
<configuration>
<doctitle>My API for ${project.name} ${project.version}</doctitle>
<windowtitle>My API for ${project.name} ${project.version}</windowtitle>
</configuration>
<reports>
<report>javadoc</report>
</reports>
</reportSet>
<reportSet>
<id>test-html</id>
<configuration>
<testDoctitle>My Test API for ${project.name} ${project.version}</testDoctitle>
<testWindowtitle>My Test API for ${project.name} ${project.version}</testWindowtitle>
</configuration>
<reports>
<report>test-javadoc</report>
</reports>
</reportSet>
</reportSets>
</plugin>
</plugins>
</reporting>
org.apache.maven.plugins
这是一个Java问题吗?在Java中,是基元类型的包装器。我看不出这怎么会导致精度损失。(如果你说的是其他语言,请让我们知道。)我假设从float到float类的更改需要分配资源,因为从float到float,然后再回到float,我假设如果我删除所有这类tripe,我可能会在几微秒后得到更多。我已经在问题中添加了Java标签,感谢您指出这一细节精度或性能?两者都很重要。问题中提出的问题已使用答案部分中列出的方法解决。在货币转换过程中发现了一些十进制精度问题。有问题的类型已更改为BigDecimal,从而解决了问题。这是Java问题吗?在Java中,是基元类型的包装器。我看不出这怎么会导致精度损失。(如果你说的是其他语言,请让我们知道。)我假设从float到float类的更改需要分配资源,因为从float到float,然后再回到float,我假设如果我删除所有这类tripe,我可能会在几微秒后得到更多。我已经在问题中添加了Java标签,感谢您指出这一细节精度或性能?两者都很重要。问题中提出的问题已使用答案部分中列出的方法解决。在货币转换过程中发现了一些十进制精度问题。有问题的类型已更改为BigDecimal,从而解决了问题。