Clojure-Java 相互運用性に関する非常に古い質問に対するこの回答では、 andキーワードを使用gen-class
して、Java からアクセス可能な単一のパブリック インスタンス変数を作成する方法について説明しています。Java クラスで使用できるデータが 1 つだけ必要な場合、または状態変数に格納されたマップなどを読み取るアクセサ関数を Java クラスで使用する必要がある場合は、これで十分です。このメソッドでは、状態変数に s を格納するなどして、データを変更することもできます。:state
:init
atom
Java クラスで直接読み取り可能な複数のインスタンス変数を作成したい場合はどうすればよいですか? これは可能ですか?たとえば、次のファイルをコンパイルしてBar
クラスを実行すると、出力された値 42 を確認できますfoo.bar
。
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
を外すと、Bar.java はコンパイルされません。コンパイラはの状態変数としてbar
またはをランダムに作成するようです。いずれにせよ、関数を使用して両方を初期化する方法がわかりません。baz
Foo
Bar
bar
baz
init