假设我有以下类继承结构:
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
成员。然后我在 a 中运行,NullPointerException
因为它尝试初始化它。
有没有办法在每次setDefault()
调用中获取基类类型?那是当在Animal
类中时this.getClass()
(或者会 yield Animal
,在Cat
类中会 yield Cat
。这是为了逐步设置仅从父类到子类的默认值。
您还有其他我可以申请的设置吗?
当然,我可以添加一个测试来检查该字段是否不为空,但这不是重点。我想将默认值设置为每个类setDefault
调用的字段。
我无法更改类层次结构或成员的声明位置。