首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法对非静态方法进行静态引用

无法对非静态方法进行静态引用
EN

Stack Overflow用户
提问于 2011-02-11 20:49:13
回答 7查看 431.2K关注 0票数 111

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

代码语言:javascript
复制
public static final String TTT =  (String) getText(R.string.TTT);

以下是错误消息:

错误:无法从类型上下文对非静态方法getText()进行静态引用

这是如何引起的,我如何解决它?

EN

回答 7

Stack Overflow用户

发布于 2011-02-11 21:41:43

已经有一些很好的答案来解释为什么非静态Context方法getText()的混合不能与您的static final String一起使用。

一个很好的问题是:你为什么想要这样做?您正在尝试从strings资源加载String,并将其值填充到public static字段中。我假设这是为了让你的一些其他类可以访问它?如果是这样,就没有必要这样做了。相反,将一个Context传递给您的其他类并从它们内部调用context.getText(R.string.TTT)

代码语言:javascript
复制
public class NonActivity {

    public static void doStuff(Context context) {
        String TTT = context.getText(R.string.TTT);
        ...
    }
}

从你的Activity调用它

代码语言:javascript
复制
NonActivity.doStuff(this);

这将允许您在不需要使用public static字段的情况下访问String资源。

票数 12
EN

Stack Overflow用户

发布于 2011-12-18 22:56:12

对于在搜索中找到以下内容的其他人:

当我不小心使用类名而不是对象名调用函数时,我经常会得到这个错误。这通常是因为我给它们起的名字太相似了:p

即:

代码语言:javascript
复制
MyClass myclass = new MyClass();

// then later

MyClass.someFunction();

这显然是一个静态方法。(对某些事情有好处)但我真正想做的是(在大多数情况下是)

代码语言:javascript
复制
myclass.someFunction();

这是一个愚蠢的错误,但每隔几个月,我就会浪费大约30分钟来处理"MyClass“定义中的变量,以找出我做错了什么,实际上,这只是一个打字错误。

有趣的是:堆栈溢出突出了语法,使错误在这里变得非常明显。

票数 10
EN

Stack Overflow用户

发布于 2011-02-11 20:54:50

您可以将变量设置为非静态变量

代码语言:javascript
复制
public final String TTT =  (String) getText(R.string.TTT);

或者使"getText“方法成为静态方法(如果可能的话)

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4969171

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档