关于实例变量与局部变量的Java问题

关于实例变量与局部变量的Java问题,java,android,Java,Android,对不起,如果我遗漏了一些明显的东西,但我对发生的事情感到困惑。我宣布锻炼计划作为类顶部的实例变量。到目前为止,它还没有被初始化 此代码有效:createWorkout返回一个Workout对象,该对象存储在局部变量test中,然后从该变量设置实例变量mWorkout public void startWorkout() { Workout test = workoutFactory.createWorkout(); mWorkout = test; } 然而,该代码没有: p

对不起,如果我遗漏了一些明显的东西,但我对发生的事情感到困惑。我宣布
锻炼计划作为类顶部的实例变量。到目前为止,它还没有被初始化

此代码有效:
createWorkout
返回一个
Workout对象
,该对象存储在局部变量
test
中,然后从该变量设置实例变量
mWorkout

public void startWorkout() {
    Workout test = workoutFactory.createWorkout(); 
    mWorkout = test;
}
然而,该代码没有:

public void startWorkout() {
    mWorkout = workoutFactory.createWorkout(); 
}
mWorkout
保持
null
状态,即使
createWorkout
仍返回
Workout
对象


为清晰起见,上述代码略为简化。

尝试使用
来限定
mWorkout

this.mWorkout = workoutFactory.createWorkout(); 

我的假设是您已经定义了一个本地
mWorkout
,它是您的实例变量,具有相同的名称。

我打赌,在
startWorkout
的非工作版本中,您已经声明了
mWorkout
的方法范围实例,该实例正在屏蔽实例字段。如果您尝试
this.mWorkout=…
您可能会得到不同的结果。

某种情况告诉我,您在简化代码时遗漏了一些内容。我认为您的代码可能过于简化,因为这两个示例在功能上应该是相同的。您能否显示整个类和WorkoutFactory.Concur。我们缺少上下文来了解这两个语句是如何不同的。此代码无法显示您描述的行为-您过度简化了它。提供一个实际的例子,我们可以对此进行调查。这是一个很好的答案,也是最可能的原因(一般而言)。今天早上我回到了代码中,将其回滚到非工作版本,由于某种原因,该版本现在正在工作。我在Eclipse中遇到了类似这样的奇怪错误,在清理项目并重新启动Eclipse之后,这些错误似乎消失了。