我正在尝试构建一个像这样的子类
abstract class Foo
{
abstract BiConsumer getConsumer();
Foo(Object value)
{
getConsumer().accept(this, value);
}
}
class Bar extends Foo
{
Object value = SOME_OBJECT_1;
@Override
BiConsumer getConsumer()
{
return (object, value) -> ((Bar)object).setValue(value);
}
Bar()
{
super(SOME_OBJECT_2);
}
void setValue(Object value)
{
this.value = value;
}
}
但使用HashMap存储要在不同子类中初始化的不同内容。
问题是,当我这样做时,运行
System.out.println(((Bar)this).value);
在Foo
的构造函数中接受使用者后,我按预期得到了SOME_OBJECT_2
。但是,当我跑
System.out.println(this.value);
在super
的构建器中Bar
调用后,我得到SOME_VALUE_1
。
为什么会这样,我该如何解决?