使用反射复制构造函数

时间:2014-02-23 18:19:36

标签: java reflection clone copy-constructor

我有一个包含100个字段的Base类和一个包含2个字段的Derived类。我希望通过调用Base类中的getter来在Derived类中访问所有100个字段,这就是为什么我使用继承而不是组合。在Derived中我想要一个构造函数来初始化Base:

中的所有内容
class Base {
  ... // 100 fields.
}

class Derived extends Base {
  ... // 2 more fields.
  Derived (Base base) {
    ... // Initialize here all 100 fields from base. Don't care about my 2 fields, can have default values.
  }
}

2 个答案:

答案 0 :(得分:6)

如果你需要从其他具有相同属性(或多或少)的bean填充bean,你肯定可以在这里找到一些东西:

http://commons.apache.org/proper/commons-beanutils/

具体地

http://commons.apache.org/proper/commons-beanutils/javadocs/v1.9.1/apidocs/org/apache/commons/beanutils/BeanUtils.html

我猜BeanUtils.copyProperties(Object orig, Object dest)可以满足您的需求,而无需复制所有字段。

答案 1 :(得分:0)

如果Constructor类中已经存在Base来初始化您奇怪的字段数量,那么您可以调用super并访问该构造函数。

示例

public class Parent {

    public Parent(String field1, String field2) {
       // Creates parent.
    }
}

public class Child extends Parent {

     public Child(String field1, String field2)
     {
        super(field1, field2);
     }
}