在Groovy中重载==不返回布尔值

时间:2016-04-26 08:45:27

标签: groovy operator-overloading dsl

我目前正在使用Groovy开发一个使用Java编写的数学相关API的DSL。

Expression类有一个带有以下签名的方法:

public Constraint equals(Expression that)

我们想要定义一个约束,它只会在以后进行评估。

是否可以使用我们的==实施覆盖equals,以便它不会返回booleanConstraint

1 个答案:

答案 0 :(得分:4)

不,据我所知,这是不可能的......

==运算符在DefaultTypeTransformation.java::compareEqual结束时会返回boolean,所以即使你这样做了:

class Yay {}

class Woo {
    String equals(Yay y) {
        'hello'
    }
}

println new Woo() == new Yay()

您将获得例外:

java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Boolean
    at org.codehaus.groovy.runtime.typehandling.DefaultTypeTransformation.compareEqual(DefaultTypeTransformation.java:641)
    at org.codehaus.groovy.runtime.ScriptBytecodeAdapter.compareEqual(ScriptBytecodeAdapter.java:684)
    at ConsoleScript3.run(ConsoleScript3:9)

它适用于a.equals(b),但不适用于a == b