我在测试我的程序。特别是,我需要比较两个BigDecimal数组:
def "compare two BigDecimal arrays"(){
given:
BigDecimal[] c = [2, 3]
expect:
c == [2,3] as BigDecimal[]
}IntelliJ IDEA报告了一个警告:
'equals' in 'org.codehaus.groovy.runtime.DefaultGroovyMethods' cannot be applied to '(java.math.BigDecimal[])' less... (Ctrl+F1) 此检查报告的任务类型不兼容。
在DefaultGroovyMethods中,我发现了以下方法:
static boolean equals(java.lang.Object[] left, java.util.List right)然后,我想,这是可以做的:
def "compore BigDecimal[] and List<BigDecimal>"(){
given:
BigDecimal[] c = [2, 3]
expect:
c == [2,3]
}但现在出现了以下警告:
'==' between objects of inconvertible types 'BigDecimal[]' and 'List<Integer>' less... (Ctrl+F1)
Reports calls to .equals() and == operator usages where the target and argument are of incompatible types. While such a call might theoretically be useful, most likely it represents a bug,所以,我的问题是:,做BigDecimal[]比较的正确方法是什么,这样就没有警告被报告?
备注:虽然报告了警告,但两个测试都运行时没有出现任何问题。
发布于 2018-01-06 13:32:25
我想这个问题的出现是因为IDE看到了两个不同的问题。首先,当使用.equals()方法或==操作符对两种不兼容类型进行比较时,它是指Java方法。以下情况就是这样:
c == [2, 3] // BigDecimal[] == List<Integer>

接下来,如果您满足具有兼容类型的IDE,那么不兼容类型赋值检查跳转并报告警告,因为IDE足够聪明,可以应用DefaultGroovyMethods.equals()替代方案,但它找不到满足参数DefaultGroovyMethods.equals(BigDecimal[] a, BigDecimal[] b)的方法。

至少有两种方法可以在IDE中消除此警告:
1)您可以直接使用DefaultGroovyMethods.equals(c, [2,3]),例如:
def "compare BigDecimal[] and List<BigDecimal> (1)"(){
given:
BigDecimal[] c = [2, 3]
expect:
DefaultGroovyMethods.equals(c, [2,3])
}2),也可以通过将@SuppressWarnings("GrEqualsBetweenInconvertibleTypes")添加到方法(或者测试类,如果有其他方法也生成相同的警告)来抑制此警告:
@SuppressWarnings("GrEqualsBetweenInconvertibleTypes")
def "compare BigDecimal[] and List<BigDecimal> (2)"(){
given:
BigDecimal[] c = [2, 3]
expect:
c == [2,3]
}第二个选项允许您在没有IDE警告的情况下使用c == [2,3]比较,我猜这是您所期望的。
https://stackoverflow.com/questions/48127651
复制相似问题