Mark,
If you use the #^{:static true} metadata on a :methods definition in a
gen-class spec for your class' implementing namespace, then those fns
appear as static functions in the generated Java class:
Clojure:
(ns bar.Foo
(:gen-class
:methods [#^{:static true} [stringLength [String] int]]))
(defn -stringLength
[s]
(.length s))
----------
compile, then in Java:
bar.Foo.stringLength("blah") => 4
--------
You can use this to gracefully expose clojure fns as Java static
methods (e.g. the implementation of -stringLength above could just
delegate to a more idiomatically-named clojure fn like string-length
so that the fn can be pleasantly accessed by clojure and Java
clients). Of course, you can access instance methods of classes
written in clojure as well, but that requires also adding a
constructor spec to :gen-class and tracking whatever state is
appropriate for the class/method in question.
- Chas
On Feb 13, 2009, at 12:29 PM, Mark Volkmann wrote:
>
> On Fri, Feb 13, 2009 at 11:19 AM, Laurent PETIT <[email protected]
> > wrote:
>> http://en.wikibooks.org/wiki/Clojure_Programming/Tutorials_and_Tips#Invoking_Clojure_from_Java
>>
>> 2009/2/13 Mark Volkmann <[email protected]>
>>>
>>> Can someone point me to documentation on how to invoke Clojure
>>> functions from Java?
>
> Thanks! That's interesting, but what I really want to do is call
> Clojure functions that have already been compiled into .class files
> from Java. Have you seen an example of that anywhere? I don't see it
> on that page.
>
> --
> R. Mark Volkmann
> Object Computing, Inc.
>
> >
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"Clojure" group.
To post to this group, send email to [email protected]
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
-~----------~----~----~----~------~----~------~--~---