为啥我应该“将 myVariable 转换为最终的一个元素数组”?
Posted
技术标签:
【中文标题】为啥我应该“将 myVariable 转换为最终的一个元素数组”?【英文标题】:Why should I "Transform myVariable to final one element array"?为什么我应该“将 myVariable 转换为最终的一个元素数组”? 【发布时间】:2017-12-12 22:21:44 【问题描述】:我正在尝试访问内部类中的 h
变量,但一直显示错误“无法为最终变量 h
赋值”。我尝试了快速修复,它指示我“将 h 转换为最后一个元素数组”。这是什么意思?
int Update ()
final int h;
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
preferences.registerOnSharedPreferenceChangeListener(new SharedPreferences.OnSharedPreferenceChangeListener()
@Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key)
if(key.equalsIgnoreCase("PINCODE"))
h = sharedPreferences.getInt(key,0);
);
return h;
【问题讨论】:
为什么你认为在程序到达return h
之前已经调用了监听器(设置h
)?我在这里看不到您代码中的逻辑。
Why lambda forces me to use single element array instead of final object?的可能重复
【参考方案1】:
在内部类中,您不能将值分配给在封闭类中某处声明的本地变量(本身),但您可以更改状态(调用方法、设置器、...)引用的对象(如果变量指向某个对象而不是原始类型)。而数组就是对象。
检查 Java 语言规范 - 关于 inner classes 的部分。
【讨论】:
【参考方案2】:该变量必须在 MainActivity 类中分配为静态变量。
static int h;
【讨论】:
以上是关于为啥我应该“将 myVariable 转换为最终的一个元素数组”?的主要内容,如果未能解决你的问题,请参考以下文章