Java带反射的下转换



我在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;
}

现在我想从《动物》到任何一个孩子。我知道它为被禁止的强制转换抛出了一个运行时异常。因此,我认为在构造函数和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);
  }
}

但是如何设置所有带反射的去父字段

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);
}

尝试Apache公共库中的BeanUtils.copyProperties。(Spring的BeanUtils类中也有同样的功能。

通过对问题的评论进行澄清后:

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

相关内容

  • 没有找到相关文章

最新更新