7

Clojure-Java 相互運用性に関する非常に古い質問に対するこの回答では、 andキーワードを使用gen-classして、Java からアクセス可能な単一のパブリック インスタンス変数を作成する方法について説明しています。Java クラスで使用できるデータが 1 つだけ必要な場合、または状態変数に格納されたマップなどを読み取るアクセサ関数を Java クラスで使用する必要がある場合は、これで十分です。このメソッドでは、状態変数に s を格納するなどして、データを変更することもできます。:state:initatom

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またはをランダムに作成するようです。いずれにせよ、関数を使用して両方を初期化する方法がわかりません。bazFooBarbarbazinit

4

1 に答える 1