1

次の例に似た 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 から誰の子にもキャストしたいと思っています。禁止されたキャストの実行時例外をスローすることを知っています。したがって、コンストラクターと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);
}
4

2 に答える 2

2

Apache commons ライブラリの BeanUtils.copyProperties を試してください (Spring の BeanUtils クラスで利用できるものと同じです。

于 2013-07-17T10:25:01.517 に答える