gpt4 book ai didi

java - 内部类非final变量java

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:42:12 25 4
gpt4 key购买 nike

我需要更改内部类中的变量,但我遇到了臭名昭著的“无法引用在不同方法中定义的内部类中的非最终变量”错误。

void onStart(){
bt.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
int q = i;
}
});
}

我很快创建了一个包含所有我想要更改的内容的类,并在内部类之外创建了该类的最终版本

class temp{
int q;
}

void onStart(){
final temp x = new temp();
bt.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
x.q = i;
}
});
}

这似乎是我需要的并且它有效,但我想知道这是否是正确解决问题的方法。另外,我真的很讨厌用 temp 这个词来命名我的类(class)。我所做的是否有一个实际的编程术语,以便我为我的类(class)取一个更具描述性的名称?

最佳答案

您可以简单地创建一个内部类而不是匿名类(就像您目前正在做的那样)。然后你有一个构造函数和任何其他你想设置你的成员的方法。不需要 hackiness(如 1 个案例的数组)。

如果类需要与其外部类进行任何数据交换,我会发现这样更干净,但承认这是个人偏好。 array of 1 idiom 也可以工作并且更简洁,但坦率地说,它看起来很丑。我通常将匿名内部类限制为那些只执行操作而不尝试更新外部类中的数据的内部类。

例如:

private MyListener listener = new MyListener();

void onStart(){
bt.setOnClickListener(listener);
}

class MyListener implements OnClickListener
{
String name;
int value;

void setName(String newName)
{
name = newName;
}

void setValue(int newValue)
{
value = newValue;
}

public void onClick(View v)
{
// Use the data for some unknown purpose
}
}

如果涉及多个线程,则还必须使用适当的同步。

关于java - 内部类非final变量java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11316954/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com