2013-09-26 115 views
0

我一样很困惑如何/为什么这可能是一个问题:不能使静态参考非静态场......但我不是在静态参考

public static long someMethod 
{ 
    long local_temp_var = PackageInfo.lastUpdateTime;  
} 

给出错误信息

不能使静态参考非静态字段 PackageInfo.lastUpdateTime

错误messafe要求我努力使作为tatic参考?我真的不相信我。是的,它是静态/类方法,但变量是本地的。

+0

PackageInfo.lastUpdateTime应该是静态的 – upog

+0

PackageInfo.lastUpdateTime应该是stati c,事实并非如此。PackageInfo是您创建的类吗? – tony9099

回答

3

好的。问题是PackageInfo中的变量lastUpdateTime不是静态的!但是你把它称为好像它。

JavaDoc of PackageInfo

你必须创建的PackageInfo又名实例...

PackageInfo info = new PackageInfo();

那么你可以做....

long local_temp_var = info.lastUpdateTime; // Take note the "info" variable from above

+0

我一定有脑冻结。它把我扔了“不能做一个静态引用”,但错误信息现在是完全合理的。感谢您的解释! :) – Tom

1

这是一个静态方法

//notice the() brackets you miss in your question. 
public static long someMethod() {...} 

的所有参考文献在其中被认为是静态的。

but the variable is a local one.

是的,本地实例变量。不是静态 - 这是你看到的错误的原因。

此外,的命名似乎已关闭。 PackageInfo似乎是你的本地变量,但这不是我们如何命名的:它应该以小写字母开头。

Java中的一行读取PackageInfo.something发送消息:“PackageInfo是一个类,我们访问其名为something的静态字段”。如果PackageInfo不是一个类,而是一个类的实例,这会发送一个令人误解的消息 - 这会消除可维护性。

2

您无法访问static上下文中的非静态字段。

由于字段lastUpdateTime不是static,因此它表示使其成为static或在此处不使用。

0

如果在声明中,您曾提到:

static long lastUpdateTime;

然后它会罚款。