java - 使用 clojure 生成 java bean

标签 java clojure interop

有没有办法在 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/

相关文章:

java - 在 Web View 中加载 jquery 和 SSL

java - 如何从java调用C#函数

amazon-web-services - 如何从 Clojure 项目或 jar 创建 AWS Lambda 函数?

c# - 如何知道 native 方法是否安全/不安全?

c++ - C# COM 的问题

java - 如何在 selenium webdriver 中的同一浏览器中继续运行测试

java - Android - 搜索框未出现

clojure - Clojure 中 map 处理的向量

clojure - 如何过滤递增向量中递减的元素?

com - 从非托管 C++ 调用托管代码(c#)的最佳方法