This has worked for me. Modify depending on your case.

CAVEAT: I built a fatjar using $ lein uberjar which I then added as an
external dependency in Eclipse. This included the clojure jar, the
contrib and potentially lots of other stuff I had in my project. It is
not entirely clear to me if one needs to lein compile and to even add
an :aot section to the project.clj file (both of which I did) so some
clarification here would be most welcomed.

clj-code:
---------
(ns me.foo)

;;; A clojure protocol is like a java interface
(defprotocol Animal
  (speak [this] "Your usual animal that speaks."))

;;; and a record is sort of like a class (or can be used as one;
generating proper Java classes from clojure is done differently)
;;; so, a Dog is an Animal and speaks!
(defrecord Dog [name breed]
  Animal
  (speak [this]
       (println "Yo! I'm" (:name this) "and I'm a" (:breed this) "dog. Woof!")))

;;; same for Cats ... or so they say.
(defrecord Cat [name breed]
  Animal
  (speak [this]
         (println (:name this) "is my name and I'm a" (:breed this)
"cat. Meow!")))


;;; after compiling and stuff we can try stuff out on the REPL:

me.foo> (def d (Dog. "Rex" "Spaniel"))
#'me.foo/d
me.foo> (speak d)
Yo! I'm Rex and I'm a Spaniel dog. Woof!
nil
me.foo> (def c (Cat. "Michi" "Persian"))
#'me.foo/c
me.foo> (speak c)
Michi is my name and I'm a Persian cat. Meow!
nil

;;; nothing to set the world on fire here really, just standard
clojure stuff however ...
;;; in javaland we can do

package com.me.scratchpad;

import me.foo.Cat;
import me.foo.Dog;

public class CljInterop {
  public static void main(String[] args) {
    Dog d = new Dog("Rex", "Spaniel");
    Cat c = new Cat("Michi", "Persian");
                
    d.speak();
    c.speak();
  }
}

;;; which when we run, on the console we get:

Yo! I'm Rex and I'm a Spaniel dog. Woof!
Michi is my name and I'm a Persian cat. Meow!

-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en

Reply via email to