变量需要声明为final [重复]

Posted

技术标签:

【中文标题】变量需要声明为final [重复]【英文标题】:Variable needs to be declared final [duplicate] 【发布时间】:2016-02-19 17:38:54 【问题描述】:

我试图在每次单击按钮时使分数变量增加一个。问题是我必须在 onClick 之外声明 score 变量,否则它将始终设置为 0。此外,我无法声明变量 final,因为我正在修改变量。这是代码。

    int score = 0;

    View.OnClickListener listener = new View.OnClickListener() 
        @Override
        public void onClick(View v) 

            score++;

            scoreLabel.setText(String.valueOf(score));

【问题讨论】:

使其成为类成员变量 【参考方案1】:

理想的解决方案是使变量static 成为外部类的成员。设置为static 意味着,该类的所有对象将共享该变量的一个副本,并且该值在任何地方都将保持不变。

在外部类中声明static int score;

【讨论】:

【参考方案2】:

如果你不想使用静态变量,你可以在外部类中声明分数(private int score;),然后在构造函数中初始化它。这将为其提供正确的访问范围!

【讨论】:

【参考方案3】:

问题是 var score 是在方法中限定的,移动它并将 score 声明为类变量。

【讨论】:

将分数变量作为“全局”变量或类变量移动...... 是的,我知道,但除非我等 10 分钟,否则我做不到。 我刚刚将 score 变量更改为公开。 不是最好的主意。请参阅@Mathews Mathai 发布的答案。【参考方案4】:

您可以使用 MutableInt,正如其名称所示,它是一个可变整数。此类在 apache commons 中提供。 这样,您可以保持变量本地和最终。

希望对你有帮助

【讨论】:

以上是关于变量需要声明为final [重复]的主要内容,如果未能解决你的问题,请参考以下文章

11.2 final变量

面向对象---final关键字

局部内部类访问它所在方法的局部变量时,要求该局部变量必须声明为final的原因

随笔② Java中的关键字 --- final关键字

Java变量与常量

Java final关键字