如何使用Clojure的gen-class创建多个Java成员变量

时间:2015-05-01 16:50:12

标签: java clojure clojure-java-interop

This answer关于Clojure-Java互操作的一个非常古老的问题解释了如何使用gen-class:state:init关键字来创建可从以下位置访问的单个公共实例变量Java的。如果您只需要一个可用于Java类的数据,或者您可以要求Java类使用读取函数(例如,存储在状态变量中的映射),这就足够了。该方法还允许数据改变,例如,将atom存储在状态变量中。

如果我想创建多个可在Java类中直接读取的实例变量,该怎么办?这可能吗?例如,我可以编译以下文件并执行Bar类,并查看打印出foo.bar的值42。

Foo.clj:

(ns students.Foo
  (:gen-class
    :name students.Foo
    :state bar
    ; :state baz
    :init init))

(defn -init
  []
  [[] 42])

Bar.java:

package students;

public class Bar {

    public static void main(String[] args) {
        Foo foo = new Foo();
        System.out.println(foo.bar);
        // System.out.println(foo.baz);
    }
}

如果我取消注释baz行,B​​ar.java不会编译 - 编译器似乎随机创建barbaz作为{{的状态变量1}},因此Foo只能使用其中一个。无论如何,我都不知道如何使用Bar函数初始化barbaz

0 个答案:

没有答案