java - 无法对非静态方法进行静态引用

标签 java compiler-errors static-methods

用 Java 构建多语言应用程序。从 R.string 资源 XML 文件插入字符串值时出错:

public static final String TTT =  (String) getText(R.string.TTT);

这是错误信息:

Error: Cannot make a static reference to the non-static method getText(int) from the type Context

这是怎么引起的,我该如何解决?

最佳答案

由于 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";

值(value)观是什么?

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() 的非静态要求是什么?

关于java - 无法对非静态方法进行静态引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4969171/

相关文章:

java - JSP 的分页问题

java - WifiInfo getSSID 断开连接时返回最后一个 SSID

c - 为什么我在每个 "Expected expression"时都会收到 "else"错误?

asp.net - appharbor 在推送后编译时出错

c++ - 错误C2664 : 'CSchemaString::CSchemaString(LPCTSTR)' : cannot convert parameter 1 from 'int' to 'LPCTSTR' [closed]

ios - 在同一类的所有对象中隐藏某些内容

java - 按数值递增字母字符

Java Netbeans : Bufferedimage can't read input file

python - 在不传递调用对象的情况下将 Python 对象的变量作为函数调用

Python 静态方法并不总是可调用的