假设我有以下类继承结构:
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()
的{{1}}方法中运行,而没有实现Animal
成员。我在myobject1
尝试初始化它时运行。
是否有办法在每个NullPointerException
调用中获取基类类型?
那就是在setDefault()
班级中Animal
(或左右会产生this.getClass()
,Animal
班级会产生Cat
。这是为了设置默认值仅从父类到子类一步一步。
你有其他任何我可以申请的设置吗?
当然,我可以添加一个测试来检查该字段是否为空,但这不是重点。我想将默认值设置为每个类Cat
调用的字段。
我无法更改类层次结构,也无法更改成员的声明位置。
答案 0 :(得分:0)
如果我理解你所要求的是setDefault
方法将采用getClass
并将获得它所在的课程,这意味着setDefault
Animal
class只会设置Animal
。
如果这就是你要问的那么答案是你不需要做getClass
,你可以设置班级成员的默认值。你有权更改它们,因为它们属于你的班级。
另外,您可以覆盖setDefault
方法,更改层次结构中每个类的值并调用父函数,以便设置每个成员
答案 1 :(得分:0)
您可以覆盖每个Class中的setDefault()方法。
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()
{
setDefault();
}
@Override
public void setDefault() {
// do some special things
}
}
public class Kitten extends Cat
{
public MyObject myobject1 = new MyObject();
public Kitten()
{
setDefault();
}
@Override
public void setDefault() {
// do some special things
}
}