我注意到一些奇怪的行为。我有以下课程:
public abstract class BaseFoo
{
public BaseFoo(String key)
{
Data data = Something.load( key );
load( data );
}
public abstract void load(Data data);
}
public class Foo extends BaseFoo
{
@Expose public long id = 0;
@Expose public String name = "";
//...
public Foo(String key)
{
super(key);
}
@Override
public void load(Data data)
{
this.id = data.id;
this.name = data.name;
//snip setting misc other fields
}
}
现在,如果我执行以下操作:
Foo f = new Foo ( "abcd" );
然后我希望包含已加载记录f.id
的 id 。Foo
但是,它的值实际上是0
。通过调试器运行此代码,我发现在执行该行Foo.load()
之前调用了该代码。public long id = 0
因此,尽管load()
被调用并且确实将其他字段设置为正确的值,但这些值随后会被 the和其他变量声明id
覆盖。public long id = 0;
我以前从未遇到过这个问题,通常构造函数中设置的值会覆盖变量声明中的默认值。是因为我通过调用 load 来super
覆盖这些值吗?如果是这样,是否有一个方便的解决方法?