【发布时间】:2015-03-13 21:01:26
【问题描述】:
我从事 Java 专业编程已经十多年了。这是我曾经试图追踪的最奇怪的错误之一。我有一个私有成员,我对其进行了初始化,然后它自行更改为 null。
public class MyObject extends MyParent
{
private SomeOtherClass member = null;
public MyObject()
{
super();
}
public void callbackFromParentInit()
{
member = new SomeOtherClass();
System.out.println("proof member initialized: " + member);
}
public SomeOtherClass getMember()
{
System.out.println("in getMember: " + member);
return member;
}
}
输出:
proof member initialized: SomeOtherClass@2a05ad6d
in getMember: null
如果你运行这段代码,显然它会正常工作。在我的实际代码中,这种精确模式中只有这三种情况(如果计算 println,则为 5 次)。
我是否在 JVM 中遇到了一些错误?除非我错了,父类不能干涉私有成员,无论我在我展示给你的代码行之间放了什么,我都不能在不使用标识符“member”的情况下更改 member 的值”。
【问题讨论】:
-
你有完整的工作示例吗?
-
什么是输出:MyObject foo = new MyObject(); foo.callbackFromParentInit(); foo.getMember();
-
我无法发布工作代码。我可以告诉你,“成员”标识符在所示模式的代码中只使用了五次。不应该有一种方法可以将其更改为 null 而无需在此类内部的另一行中使用标识符。
-
您在类实例化时将其设置为 null,并且仅在函数 callbackFromParentInit() 的范围内初始化。当你调用“getMember()”时,它返回类的空值,因为它从未在类的范围内实例化。
-
无法保证“in getMember” println 来自与打印“proof member initialized”相同的实例。
标签: java null private-members