无法对非静态方法进行静态引用
在 Java 中构建多语言应用程序。从资源 XML 文件插入字符串值时收到错误:R.string
public static final String TTT = (String) getText(R.string.TTT);
这是错误消息:
错误:无法从上下文类型对非静态方法 getText(int) 进行静态引用
这是如何引起的,我该如何解决?
在 Java 中构建多语言应用程序。从资源 XML 文件插入字符串值时收到错误:R.string
public static final String TTT = (String) getText(R.string.TTT);
这是错误消息:
错误:无法从上下文类型对非静态方法 getText(int) 进行静态引用
这是如何引起的,我该如何解决?
由于 是 非静态的,因此不能从静态方法调用它。getText()
要理解原因,您必须了解两者之间的区别。
实例(非静态)方法适用于特定类型(类)的对象。这些是用新的创建,如下所示:
SomeClass myObject = new SomeClass();
要调用实例方法,请在实例上调用它 ():myObject
myObject.getText(...)
但是,静态方法/字段只能直接在类型上调用,如下所示:前面的语句不正确。也可以使用对象引用(如 myObject.staticMethod() )
来引用静态字段,但不鼓励这样做,因为它没有明确说明它们是类变量。
... = SomeClass.final
两者不能一起工作,因为它们在不同的数据空间(实例数据和类数据)上运行。
让我试着解释一下。考虑这个类(伪代码):
class Test {
string somedata = "99";
string getText() { return somedata; }
static string TTT = "0";
}
现在我有以下用例:
Test item1 = new Test();
item1.somedata = "200";
Test item2 = new Test();
Test.TTT = "1";
值是什么?
井
in item1 TTT = 1 and somedata = 200
in item2 TTT = 1 and somedata = 99
换言之,是由类型的所有实例共享的基准。所以说没有道理TTT
class Test {
string somedata = "99";
string getText() { return somedata; }
static string TTT = getText(); // error there is is no somedata at this point
}
所以问题是为什么TTT是静态的,或者为什么getText()不是静态的?
删除,它应该会通过此错误 - 但是如果不了解您的类型做什么,它只是一个粘贴的石膏,直到下一个错误。要求它是非静态的是什么要求?static
getText()
已经有一些很好的答案,解释了为什么非静态方法的混合不能与您的.Context
getText()
static final String
一个很好的问题是:你为什么要这样做?您正在尝试从资源加载 ,并将其值填充到字段中。我假设这是为了让您的其他一些类可以访问它?如果是这样,则无需执行此操作。相反,将 a 传递到你的其他类中,并从它们内部调用。String
strings
public static
Context
context.getText(R.string.TTT)
public class NonActivity {
public static void doStuff(Context context) {
String TTT = context.getText(R.string.TTT);
...
}
}
并从您的:Activity
NonActivity.doStuff(this);
这将允许您访问资源,而无需使用字段。String
public static