首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >史波克:尝试比较两个BigDecimal数组时的警告

史波克:尝试比较两个BigDecimal数组时的警告
EN

Stack Overflow用户
提问于 2018-01-06 13:08:39
回答 1查看 794关注 0票数 1

我在测试我的程序。特别是,我需要比较两个BigDecimal数组:

代码语言:javascript
复制
def "compare two BigDecimal arrays"(){
  given:
  BigDecimal[] c = [2, 3]
  expect:
  c == [2,3] as BigDecimal[]
}

IntelliJ IDEA报告了一个警告:

代码语言:javascript
复制
'equals' in 'org.codehaus.groovy.runtime.DefaultGroovyMethods' cannot be applied to '(java.math.BigDecimal[])' less... (Ctrl+F1) 

此检查报告的任务类型不兼容。

在DefaultGroovyMethods中,我发现了以下方法:

代码语言:javascript
复制
static boolean equals(java.lang.Object[] left, java.util.List right)

然后,我想,这是可以做的:

代码语言:javascript
复制
def "compore BigDecimal[] and List<BigDecimal>"(){
  given:
  BigDecimal[] c = [2, 3]
  expect:
  c == [2,3]
}

但现在出现了以下警告:

代码语言:javascript
复制
'==' 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[]比较的正确方法是什么,这样就没有警告被报告?

备注:虽然报告了警告,但两个测试都运行时没有出现任何问题。

EN

回答 1

Stack Overflow用户

发布于 2018-01-06 13:32:25

我想这个问题的出现是因为IDE看到了两个不同的问题。首先,当使用.equals()方法或==操作符对两种不兼容类型进行比较时,它是指Java方法。以下情况就是这样:

代码语言:javascript
复制
c == [2, 3] // BigDecimal[] == List<Integer>

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

至少有两种方法可以在IDE中消除此警告:

1)您可以直接使用DefaultGroovyMethods.equals(c, [2,3]),例如:

代码语言:javascript
复制
def "compare BigDecimal[] and List<BigDecimal> (1)"(){
    given:
    BigDecimal[] c = [2, 3]

    expect:
    DefaultGroovyMethods.equals(c, [2,3])
}

2),也可以通过将@SuppressWarnings("GrEqualsBetweenInconvertibleTypes")添加到方法(或者测试类,如果有其他方法也生成相同的警告)来抑制此警告:

代码语言:javascript
复制
@SuppressWarnings("GrEqualsBetweenInconvertibleTypes")
def "compare BigDecimal[] and List<BigDecimal> (2)"(){
    given:
    BigDecimal[] c = [2, 3]

    expect:
    c == [2,3]
}

第二个选项允许您在没有IDE警告的情况下使用c == [2,3]比较,我猜这是您所期望的。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48127651

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档