有没有办法在 clojure 中给定 vector 轻松生成 java bean?例如给定一个这样的 vector :
[
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 bean(我知道它们不一定是,但我希望它们是)。一种方法是在 java 中定义模型,然后使用 clojure 的普通 java 互操作在 clojure 代码中填充模型,但我喜欢将简洁的 clojure vector (或映射)扩展为(详细的)java bean 的想法。
最佳答案
我认为您的 Java 代码不能很好地与自动生成的 Java bean 兼容类一起使用。您需要至少在 Java 端有一个接口(interface),以便了解 Clojure 将要返回的内容。否则,您将不得不恢复到:
Object result = callClojureLib(params);
然后,无论实际结果是否实现 Java bean 契约,您的 Java 代码都必须执行各种反射魔法才能调用 setter,因为您缺少类规范。
解决该问题的另一种方法是使用 java.util.Map
接口(interface)作为 Java 和 Clojure 世界之间的契约。这样,您可以只使用普通的 Clojure 映射作为传输对象,因为它们可以分配给 java.util.Map
:
user=> (isa? (class {}) java.util.Map)
true
关于java - 使用 clojure 生成 java bean,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9753164/