我正在测试我的程序。特别是,我需要比较两个public bool doable = false;
private void OnTriggerStay2D(Collider2D collision)
{
if (collision.CompareTag("Platform"))
{
doable = true;
}
}
数组:
BigDecimal
IntelliJ IDEA报告警告:
def "compare two BigDecimal arrays"(){
given:
BigDecimal[] c = [2, 3]
expect:
c == [2,3] as BigDecimal[]
}
此检查报告具有不兼容类型的分配。
在 DefaultGroovyMethods 中,我找到了以下方法:
'equals' in 'org.codehaus.groovy.runtime.DefaultGroovyMethods' cannot be applied to '(java.math.BigDecimal[])' less... (Ctrl+F1)
然后,我想,它可以做到:
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
比较的正确方法是什么,以便没有报告任何警告?
备注:即使报告了警告,两次测试都没有任何问题。
答案 0 :(得分:2)
我猜这个问题是因为IDE看到了两个不同的问题。首先,当使用.equals()
方法或.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]
}
第二个选项允许您使用c == [2,3]
比较而没有IDE警告,这是您所期望的。