Wie kann ich einen Clojure-Typ definieren, der die Servlet-Schnittstelle implementiert?

7

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%     
Rob Lachlan 18.05.2010, 01:22
quelle

1 Antwort

20

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.

    
Chouser 18.05.2010, 03:18
quelle