首页 > 解决方案 > java中的Lambda:变量与类字段

问题描述

lambda 中的变量必须是有效的 final。好的。但是为什么允许在下面的示例代码中分配类字段值呢?

堆和堆栈会导致这种差异吗?为什么?

class Scratch
{
    public String field = "class field";


    public void example()
    {
        Function<String, Integer> funcWithField = s ->
        {
            field = "New field value from lambda";
            // IT`s OK here
            return field.length();
        };

        String variable = "var";
        Function<String, Integer> funcWithVariable = s ->
        {
            // Though such things are restricted!
            // variable = "some other loooong value for variable";
            return variable.length();
        };
    }
}

标签: javavariableslambdafield

解决方案


推荐阅读