Mark Engelberg <[email protected]> writes:
> Are there any examples available of creating a compiled
> class/interface with deftype and defprotocol, and using these from
> Java?
It's pretty straightforward and works exactly how you might expect it
to.
Create a new project:
$ lein new interop
Define a type and protocol in interop/src/interop/core.clj:
(ns interop.core)
(defprotocol Vocal
(dance [this boogie])
(speak [this]))
(deftype Chorus [noise]
Vocal
(dance [this boogie] (println "Shuffle like a" boogie))
(speak [this] (println "I say there! I can hear a" noise)))
(println "boom") ;; just curious if this will be executed
Mark the namespace to be AOT-compiled by lein in interop/project.clj:
(defproject interop "1.0.0"
:aot [interop.core]
:dependencies [[org.clojure/clojure "1.2.0"]])
Compile it:
$ lein compile
Create a Java client class interop/src/Client.java:
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");
}
}
Compile it:
$ javac -cp $(lein classpath) src/Client.java
Run it:
$ java -cp $(lein classpath) Client
I say there! I can hear a bird
Shuffle like a pigeon
--
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