从clojure映射创建javabean



clojure.core提供了bean,它可以从java对象创建clojure映射,但是否有反向函数可以从映射创建bean(java对象)?

具体取决于您需要什么。

Java中存在Bean类型

换句话说,您的java项目中有一个Customer.class,您希望根据映射中的数据通过Clojure对其进行实例化和填充。这可以简单地通过java互操作来完成。

在Clojure中创建的Bean类型

您可以使用AOT编译来创建一个Javabean类型,这将在磁盘上产生一个.class文件,并可以在Java项目中使用(与任何没有相应Java源的Java类相同)。您可以使用clj-bean库来避免手动使用gen类。

在Clojure中动态创建的Bean类型,不带.class文件

在这种情况下,您可以使用deftype通过动态字节码创建来创建bean(只需为getter和setter创建方法,并将数据从移动到映射)。

你可以在这个项目中找到所有上述方法的例子

有各种库执行Clojure映射&lt->Java Bean翻译,包括我写的一个名为Bean dip的翻译。以下是README中对所考虑的其他选项的细分,以及bean dip:的区别

。。。

现有的翻译解决方案存在一些功能缺口,导致我们创建了bean dip:内置的clojure.core/bean是单向的,使用未缓存的反射,并且无法进行配置。缓存反射可以通过gagagai获得,但它只是单向的。有java.data,它是双向的、递归的、无反射的,但它不是声明性的,这使得大型翻译层很难维护。

豆汁是:

  • 双向:从bean转换到map,然后再转换回来
  • 声明性:只需指定bean类和对应映射的一组键
  • 递归:当嵌套bean也定义了翻译时,翻译会下降到嵌套bean中
  • 无反射:宏生成类型提示代码,可以在编译时通过*warn-on-reflection*进行名称检查
  • 可扩展:通过多方法的实现按键转换值

Namespaced键受支持,使用规范可以轻松地使用Java API强制执行合同。。。

最新更新