Java反向转型与反思

时间:2013-07-17 08:56:08

标签: java spring reflection java-6 downcast

我在Java 1.6中使用类似于此示例的模型:

public class Animal {
  public String color;
}

public class Dog extends Animal {
  public Float height;
}

public class Bird extends Animal {
  public Integer wings;
}

现在我希望从Animal转发给任何一个孩子。我知道它会为forbidden cast抛出一个运行时异常。所以我认为在构造函数和java反射的帮助下,只有子字段才能有子字段。例如:

public class Animal {
  public String color;

  public Animal(Animal old){
    //Set all fields by reflection. but how!
  }
}

public class Dog extends Animal {
  public Float height;

  public Dog (Animal old){
     super(old);
  }
}

public class Bird extends Animal {
  public Integer wings;
  public Bird (Animal old){
     super(old);
  }
}

但是如何用反射设置所有de parent字段?

解决方案来自Thinaesh https://stackoverflow.com/a/17697270/1474638)谢谢! 我正在使用Spring,所以我只需要在父构造函数中进行下一步:

public Animal(Animal old){
  super();
  BeanUtils.copyProperties(old, this);
}

  public Dog(Animal old){
  super(old);
}

public Bird(Animal old){
  super(old);
}

2 个答案:

答案 0 :(得分:2)

尝试Apache commons库中的BeanUtils.copyProperties。(在Spring的BeanUtils类中可以使用相同的东西。

答案 1 :(得分:0)

通过对您的问题的评论得到一些澄清:

您在这里所做的只是在类的构造函数中复制值。没有必要反思。除非没有别的办法,否则应该避免反思。