クロージャーでベクトルを指定してJava Beanを簡単に生成する方法はありますか?例えば、このようなベクターを与えられた:は、クロージャーでjava beansを生成します
[
String :key1
Integer :key2
]
私はそれがこのようなコードを生成したいと思います:コンテキストについて
public class NotSureWhatTheTypeWouldBeHere {
private String key1;
private Integer key2;
public NotSureWhatTheTypeWouldBeHere() {}
public NotSureWhatTheTypeWouldBeHere(String key1, Integer key2) {
this.key1 = key1;
this.key2 = key2;
}
public void setKey1(String key1) {
this.key1 = key1;
}
public String getKey1() {
return this.key1;
}
public void setKey2(Integer key2) {
this.key2 = key2;
}
public String getKey2() {
return this.key2;
}
// and equals,hashCode, toString, etc.
}
を、私はJavaで書かれているアプリを書きたいのですが、 clojureで書かれた図書館への呼び出し。つまり、戻り値はJava Beansでなければなりません(私は彼らがいなくてもよいと思っていますが、そうしたいと思います)。 1つの方法は、javaでモデルを定義し、次にclojureの通常のJava interopを使用してモデルをクロージャーコードに入力することですが、(冗長な)Java Beanに展開する簡潔なクロージャーベクトル(またはマップ)の考え方が好きです。
インターフェイスクラスとしてjava.util.Mapを使用する場合+1。私はさらにStringsをキーとして使うことをお勧めします:これらはClojure側のキーワードと同様に動作しますが、Java APIユーザーにとってははるかに簡単です。 – mikera
これはおそらく正しい答えですが、具体的には、Java側でマップを必要としません。私はサービス、DAO、およびモデルオブジェクトの束であるJavaコードの膨大な幅を持っています。私はモデルオブジェクトを動的に生成できるようにclojureに書き直すことができました(コードサイズを大幅に縮小する)。クライアントの観点から見ると、コードは元のJavaコードと変わりません。 – Kevin
クライアントJavaコードのサンプルから始めることをお勧めします。そして、必要なすべてのケースを記述し、Clojureから 'reify'できる共通のインタフェースを見つけることをお勧めします。この問題は、Java側と共通の契約を結ばずにJava Beanをオンザフライで生成しようとすることに本当にあります。 – skuro