The official Clojure API for Java is defined here
<https://clojure.github.io/clojure/javadoc/clojure/java/api/Clojure.html> and
only supports importing Clojure vars under the IFn interface. In other
words, you can only import Clojure functions, not Clojure values, through
that API. What you are trying to do is not supported.

That does not mean it's impossible. If you control the Clojure side, the
easiest approach is to just make a function and call that through the
official API. If for some reason that's not an option, you can try gen-class
<https://clojuredocs.org/clojure.core/gen-class>, which may be faster.

If you can't change the Clojure side, you'll have to use undocumented APIs.
The Clojure.var
<https://github.com/clojure/clojure/blob/master/src/jvm/clojure/java/api/Clojure.java#L82>
call
will return a Var
<https://github.com/clojure/clojure/blob/master/src/jvm/clojure/lang/Var.java>
(cast
to the IFn
<https://github.com/clojure/clojure/blob/master/src/jvm/clojure/lang/IFn.java>
interface), which has a deref()
<https://github.com/clojure/clojure/blob/master/src/jvm/clojure/lang/Var.java#L199>
method that should get you the underlying value. This is undocumented so it
may break and all that, but it really looks like all you need to do is cast
that IFn back to a Var (or an IDeref
<https://github.com/clojure/clojure/blob/master/src/jvm/clojure/lang/IDeref.java>,
as Chris suggested).

Overall, I'd strongly recommend going through the documented API and just
add a no-arg function.

On Fri, 18 Jun 2021 at 12:53, ru <soro...@oogis.ru> wrote:

> Dear Clojure users and team!
> Citation 1 from Clojure documentation:
>
> "Calling Clojure From Java..
> IFn plus = Clojure.var("clojure.core", "+");
> plus.invoke(1, 2);.."
>
> With functions all well but with def..
>
> Citation 2:
>
> "(def *symbol* *doc-string*? *init*?)
>
> Creates and interns or locates a global var
> <https://clojure.org/reference/vars> with the name of *symbol* and a
> namespace of the value of the current namespace (*ns*). "
>
> I can not figure out how to get the value of the symbol, created with def
> construct in Clojure and, for example, print it with System.out.println in
> Java.
>
> I tried everything, nothing works! :(
>
> Any help would be greatly appreciated.
>
> Sincerely,
>
>   Ru
>
>
>
>
>
> --
> 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
> ---
> You received this message because you are subscribed to the Google Groups
> "Clojure" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to clojure+unsubscr...@googlegroups.com.
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/clojure/fcbd3883-705a-4180-9b99-7ccad64a09afn%40googlegroups.com
> <https://groups.google.com/d/msgid/clojure/fcbd3883-705a-4180-9b99-7ccad64a09afn%40googlegroups.com?utm_medium=email&utm_source=footer>
> .
>

-- 
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
--- 
You received this message because you are subscribed to the Google Groups 
"Clojure" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to clojure+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/clojure/CAGqyAap%3D9hSErWXirxYAcp8uHVDc91LSJ5bQkKwOxFad6KjG_Q%40mail.gmail.com.

Reply via email to