用Java构建多语言应用程序。从R.string
资源XML文件插入String值时出现错误:
public static final String TTT = (String) getText(R.string.TTT);
这是错误消息:
错误:无法从类型静态引用非静态方法getText(int)
语境
这是怎么引起的,我该如何解决?
最佳答案
由于getText()
是非静态的,因此无法从静态方法调用它。
要了解原因,您必须了解两者之间的区别。
实例(非静态)方法适用于特定类型(类)的对象。这些是使用新的创建的,如下所示:
SomeClass myObject = new SomeClass();
要调用实例方法,请在实例(
myObject
)上调用它:myObject.getText(...)
但是,只能直接在类型上调用静态方法/字段,如下所示:
前面的陈述是不正确的。 One can also refer to static fields with an object reference like
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()
的非静态要求是什么?