嗯,实际上在检查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一致性合同的结果,还是可以改进以返回更准确的结果?
答案 0 :(得分:0)
有人认为这是一个错误还是只是“它是如何运作的”;然而,它已经存在了一段时间。您遇到的是您正在比较String
和GString
,它们与相同的内容不相同。我曾经认为在当前版本的Groovy中修改了这种行为,但我可能错了。
您可以使用以下方法获得所需的行为:
("${'1'}" as String).equals('1')
当您使用GString
作为Map
中的键或Set
中的值时,这也会让您感到沮丧。