次のクラス継承構造があるとします。
public class Animal
{
public Animal()
{
setDefault();
}
public void setDefault()
{
Field[] Fields = this.getClass().getFields();
for ( Field F : Fields )
{
// perform some initialization per field class
if ( MyObject.class.isAssignableFrom( F.getType() ))
{
( (MyObject) f.get(this)).setValue(0);
}
// ...
}
}
}
public class Cat extends Animal
{
public Cat()
{
super();
setDefault();
}
}
public class Kitten extends Cat
{
public MyObject myobject1 = new MyObject();
public Kitten()
{
super();
setDefault();
}
}
オブジェクトをインスタンス化すると、メンバーをインスタンス化せずに親クラスKitten
のメソッドで実行されます。次に、初期化を試みるときに実行します。setDefault()
Animal
myobject1
NullPointerException
setDefault()
各呼び出しで基本クラスの型を取得する方法はありますか? それは、Animal
クラスにいるときですthis.getClass()
(またはAnimal
、Cat
クラスでは yieldにCat
なります。これは、親クラスから子クラスにのみデフォルト値を段階的に設定するためです。
他に適用できるセットアップはありますか?
もちろん、フィールドが null でないかどうかを確認するテストを追加できますが、それは重要ではありません。setDefault
各クラス呼び出しのフィールドのみにデフォルトを設定したいと思います。
クラスの階層もメンバーの宣言の場所も変更できません。