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,从而解决了问题。