为啥我应该“将 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 转换为最终的一个元素数组”?的主要内容,如果未能解决你的问题,请参考以下文章

在执行语义分割任务时我应该减去图像均值吗?为啥或者为啥不?

为啥我应该使用单独的测试目标来运行 XCTests,我应该怎么做?

我应该使用 createRef 还是 useRef,为啥?

我应该使用 FxCop,为啥?

为啥我不应该使用 Unity?

为啥我应该使用“下一个/图像”?