2016-04-26 9 views
2

Ich entwickle gerade ein DSL mit Groovy für eine mathematische API in Java geschrieben.Overload == in Groovy nicht zurück boolean

Die Expression Klasse verfügt über eine Methode mit folgenden Signatur:

public Constraint equals(Expression that)

Wir wollen eine Einschränkung definieren, die erst später ausgewertet werden.

Ist es möglich, == mit unserer equals Implementierung außer Kraft zu setzen, damit es nicht boolean aber Constraint zurückkehrt?

Antwort

4

Nein, soweit ich weiß, ist es nicht möglich ...

Der == Operator an einem gewissen Punkt endet in DefaultTypeTransformation.java::compareEqual bis die boolean zurückkehrt, so dass selbst wenn Sie tun:

class Yay {} 

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

println new Woo() == new Yay() 

Sie erhalten die Ausnahme erhalten:

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) 

Es wird mit a.equals(b) arbeiten, aber nicht a == b