Javaとの相互運用性のために、初期化を実行するnullaryコンストラクタを持つクラスが必要です。 このクラスのオブジェクトには、変更可能なJavaフィールドに似たものが必要です(つまり、オブジェクトはゲームのバックエンドを表し、ゲーム状態を維持する必要があります)。 (私はフィールドを持つクラスを作成していますので)deftypeで作成したクラスにコンストラクタを追加します
のDeftypeは私が以外をしたいすべては、引数なしのコンストラクタを提供しません。
私は公に読めるようにフィールドを必要としないので、私は4つの解決策を考えることができます:
使用GEN-クラス。私がそれを避けることができれば、私はこれをしたくありません。
何とかdeftypeの知識の外にあるprivateメンバー変数をエンコードしています。私はこれができないと言われてきました。
また、nullaryコンストラクタも作成する変更されたdeftypeを作成します。率直に言って、私はこれに十分なクロージャを知らない。
deftypeによって作成されたクラスを取得し、何らかの形でそれに新しいコンストラクタを追加します。
最後に、クラスから新しいオブジェクトを作成するJavaコードに渡すので、Javaクラスが必要です。
Genクラスを実行可能にする以外に、私が提案した解決策(または私が考えていないもの)はありますか?
コンストラクタの作成は、clojureのJavaコードの深いところにあるようです。したがって、デフタイプ自体を変更することは少し難しく、ちょっとした悪い考えであるように思えます。 –
フィールドはどのようにアクセスされ、インスタンスはyourClass.newInstance()とリフレクションを生成しましたか?だから、多分私はビットが恐れていることを恐れている生成されたクラスのJava側の使用法の詳細を知っているかもしれないgenクラスの時間:( –