Скажет, у меня следующая структура наследования класса:GetFields базового класса вместо инстанциировано один
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
wihtout, имеющее создание экземпляра в myobject1
член. Затем я запускаю команду NullPointerException
, пытаясь ее инициализировать.
Будет ли способ получить тип базового класса в каждом вызове setDefault()
? То есть, когда, находясь в Animal
классе this.getClass()
(или так уступит Animal
, в Cat
классе даст Cat
. Это делается для того, чтобы установить значения по умолчанию только из родительского класса для дочерних классов, шаг за шагом.
Do у вас есть какая-либо другая настройка, которую я могу подать?
Конечно, я могу добавить тест, чтобы проверить, не поле не пустое, но это не так. Я хотел бы установить значения по умолчанию только для полей каждого класса setDefault
.
Я не могу изменить иерархию классов и объявления участников.
Вы действительно правы. Но в моем случае 'setDefault' класса' Animal' является общим методом для установки значения по умолчанию для экземпляров 'MyObject'. Я просто хочу установить значения для полей, которые ** объявлены ** на уровне класса, но в методе родительского класса 'setDefault'. – microcosme