使用 Java 构建多语言应用程序。从 R.string
资源 XML 文件插入字符串值时出错:
public static final String TTT = (String) getText(R.string.TTT);
这是错误消息:
错误:无法从类型 Context 对非静态方法 getText(int) 进行静态引用
这是怎么引起的,我该如何解决?
原文由 Chen M 发布,翻译遵循 CC BY-SA 4.0 许可协议
使用 Java 构建多语言应用程序。从 R.string
资源 XML 文件插入字符串值时出错:
public static final String TTT = (String) getText(R.string.TTT);
这是错误消息:
错误:无法从类型 Context 对非静态方法 getText(int) 进行静态引用
这是怎么引起的,我该如何解决?
原文由 Chen M 发布,翻译遵循 CC BY-SA 4.0 许可协议
已经有一些很好的答案解释了为什么混合非静态 Context
方法 getText()
不能与你的 static final String
.
一个很好的问题是:你为什么要这样做?您正在尝试从您的 strings
资源加载 String
并将其值填充到 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
字段。
原文由 dave.c 发布,翻译遵循 CC BY-SA 3.0 许可协议
15 回答8.4k 阅读
8 回答6.2k 阅读
1 回答4k 阅读✓ 已解决
3 回答6k 阅读
3 回答2.2k 阅读✓ 已解决
2 回答3.1k 阅读
2 回答3.8k 阅读
由于
getText()
是非静态的,因此您不能从静态方法中调用它。要了解原因,您必须了解两者之间的区别。
实例(非静态)方法适用于特定类型(类)的对象。这些是用这样的新创建的:
要调用实例方法,您可以在实例上调用它(
myObject
):但是静态方法/字段 只能 直接在类型上调用,这样说: 前面的说法不正确。也可以使用像
myObject.staticMethod()
这样 的对象引用来引用静态字段, 但不鼓励这样做,因为它没有明确表示它们是类变量。并且两者不能协同工作,因为它们在不同的数据空间(实例数据和类数据)上运行
让我试着解释一下。考虑这个类(伪代码):
现在我有以下用例:
价值观是什么?
出色地
换句话说,
TTT
是该类型的所有实例共享的数据。所以说没有意义所以问题是为什么 TTT 是静态的或者为什么 getText() 不是静态的?
删除
static
它应该可以解决这个错误 - 但如果不了解你的类型是做什么的,它只是一块橡皮膏,直到下一个错误。getText()
要求它是非静态的有什么要求?