为什么在Groovy中这是错误的“$ {'1'}”。等于('1')`

时间:2016-04-18 11:44:14

标签: groovy equals contract

嗯,实际上在检查GString.equals()方法实现之后,它的工作原理并不是一个谜。

public boolean equals(Object that) {
    if (that instanceof GString) {
        return equals((GString) that);
    }
    return false;
}

问题仍然存在,是否需要行为,在这种情况下是否应该按设计返回true

如果false到位,很容易遇到意外的行为,例如:

"${'1'}" in ['1', '2', '3']

...将返回false。

当前行为是否为equals和hashCode一致性合同的结果,还是可以改进以返回更准确的结果?

1 个答案:

答案 0 :(得分:0)

有人认为这是一个错误还是只是“它是如何运作的”;然而,它已经存在了一段时间。您遇到的是您正在比较StringGString,它们与相同的内容不相同。我曾经认为在当前版本的Groovy中修改了这种行为,但我可能错了。

您可以使用以下方法获得所需的行为:

("${'1'}" as String).equals('1')

当您使用GString作为Map中的键或Set中的值时,这也会让您感到沮丧。