Ich versuche, deftype (aus dem Clojure 1.2-Branch) zu verwenden, um eine Java-Klasse zu erstellen, die die Java-Servlet-Schnittstelle implementiert. Ich würde erwarten, dass der folgende Code kompiliert (obwohl es nicht sehr nützlich ist).
%Vor%Aber es kompiliert nicht. Der Compiler erzeugt die Nachricht:
%Vor%Was für mich keinen Sinn ergibt, weil ich null zurückgebe. Daher sollte die Tatsache, dass der Rückgabetyp der Methode ungültig ist, kein Problem darstellen. Zum Beispiel für die Schnittstelle java.util.Set:
%Vor%kompiliert ohne Problem.
Also, was mache ich falsch mit der Servlet-Schnittstelle?
Um es klar zu sagen: Ich weiß, dass der typische Fall darin besteht, eine der abstrakten Servlet-Klassen abzuleiten, anstatt diese Schnittstelle direkt zu implementieren, aber es sollte immer noch möglich sein, dies zu tun.
Stapelverfolgung:
Der Stack-Trace für das (defType-Servlet ... ist:
%Vor%Versuchen Sie es ohne Typhinweise:
%Vor%Von die Webseite über deftype :
Wenn Sie alle Hinweise weglassen: wird es versuchen mit der gleichen Namen / Arity-Methode übereinstimmen Schnittstelle (n)
- das ist bevorzugt
- Wenn Sie überhaupt irgendwelche Hinweise geben, wird keine Schlussfolgerung gemacht, also alle Hinweise (oder Standard von Object) muss korrekt sein, Für beide Argumente und Rückgabetyp
Und von (doc deftype)
:
Wenn nicht angegeben, werden sie abgeleitet, daher sollten Typhinweise für die Disambiguierung reserviert werden.
Tags und Links clojure servlets java-interop deftype