【问题标题】:How to assign all matching properties from Groovy object to Java object?如何将 Groovy 对象中的所有匹配属性分配给 Java 对象?
【发布时间】:2011-08-24 01:51:22
【问题描述】:

我想使用带有 JDBC 的 Groovy 从表中加载一些数据。然后,我想将属性复制到属性名称匹配的位置。我如何在 Groovy 中做到这一点?

类似这样的:

sql.eachRow("select * from temp_table") {

        def e = new MyJavaClass()

        // copy matching fields from it to e

    }

【问题讨论】:

    标签: groovy properties javabeans


    【解决方案1】:

    除了 topchef 的回答之外,您也许可以使用一些 groovy 地图魔术

    如果您将 sql 限制为 Java 类中的属性(并假设您可以一次将整个结果保存在内存中),那么您应该能够使用 rows 方法来获得 List 的 @ 987654324@ 个对象(每行一个)。由于这个类是Map 的一个实例,groovy 会为你使用它来construct your java object automatically:

    class MyJavaClass {
      String property1, property2, property3
    }
    
    sql.rows("select property1, property2, property3 from temp_table").each { row ->
       MyJavaClass e = row
    }
    

    【讨论】:

      【解决方案2】:

      一些绝妙的魔法会有所帮助:

      def filtered = ['property1', 'property2', ....]
      
      sql.eachRow("select * from temp_table") {
      
              def e = new MyJavaClass(it.properties.findAll{filtered.contains(it.key)})
      
      }
      

      鉴于

      • list filtered 包含您要复制的所有属性名称;
      • 您的表列名称对应于MyJavaClass 声明的属性名称(与列表中的filtered 相同);
      • MyJavaClass 同时具有默认(空)构造函数和构造函数 将所有属性作为参数;
      • MyJavaClass 声明属性的公共设置器;

      例如:

         public MyJavaClass() {}
      
         public MyJavaClass(String property1, String property2, ....) {
             this.property1 = property1;
             this.property2 = property2;
             .... }
      
         public void setProperty1(String property1) {this.property1 = property1;}
         public void setProperty2(String property2) {this.property2 = property2;}
         ....
      

      您可以使用filtered 作为不需要的属性列表,如下所示:

      def filtered = ['class', 'metaClass', ....]
      

      然后:

      def e = new MyJavaClass(it.properties.findAll{!filtered.contains(it.key)})
      

      【讨论】:

        猜你喜欢
        • 2014-04-05
        • 2010-11-15
        • 2020-05-22
        • 2022-01-15
        • 1970-01-01
        • 1970-01-01
        • 2011-09-22
        • 1970-01-01
        • 2012-11-09
        相关资源
        最近更新 更多