Mark Engelberg <[email protected]> writes:
> Looks easy, but your dance and speak methods don't return a value
> which leaves a question in my mind...
>
> If the protocol implementation actually returns a value, do you have
> to explicitly typecast it in Java from Object into the desired type?
Yep, certainly. A Clojure function can return any type so it has to be
that way generally.
However if you don't actually need the features of full protocols you
could use gen-interface instead:
(ns interop.core)
(gen-interface
:name interop.core.Vocal
:methods [[dance [Object] Object]
[speak [] Object]
[sum [int int] int]])
(deftype Chorus [noise]
interop.core.Vocal
(dance [this boogy] (println "Shuffle like a" boogy))
(speak [this] (println "I say there! I can hear a" noise))
(sum [this x y] (+ x y)))
Then the client becomes:
import interop.core.Chorus;
import interop.core.Vocal;
public class Client {
public static void main(String args[]) {
Vocal voice = new Chorus("bird");
voice.speak();
voice.dance("pigeon");
int x = voice.sum(1, 2);
System.out.println("1 and 2 is " + x);
}
}
And so:
$ java -cp $(lein classpath) Client
I say there! I can hear a bird
Shuffle like a pigeon
1 and 2 is 3
--
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to [email protected]
Note that posts from new members are moderated - please be patient with your
first post.
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en