为什么我不能通过Groovy中的构造函数内部的闭包来初始化最终类变量?

舒伯斯

任何人都可以向我解释以下代码为何final被注释掉,但如果final存在则不起作用

public class Person {
    public /*final*/ String firstName, lastName

    Person(Map parameters) {
        // This does *not* work with "final":
        parameters.each { name, value ->
            this."$name" = value
        }

        // This *does* work with "final":
        this.lastName = parameters['lastName']
    }
}

Person p = new Person(firstName: 'Joe', lastName: 'Doe')
println p.firstName + ' ' + p.lastName

换句话说,无论是在闭包内部还是在构造函数的顶层初始化最终变量,为什么都不同?

杰夫·斯科特·布朗

任何人都可以向我解释为什么如果注释了final但下面的代码为什么起作用,但是如果存在final则为什么不起作用?

编译器必须强制您的最终属性在构造函数中初始化,并且在您的示例中无法执行此操作,因为编译器不知道Map

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

初始化的方法中的最终变量从类构造函数调用

我应该在构造函数内部还是外部构造函数中初始化变量

在Java中的构造函数之前初始化最终变量

为什么我们不能调用servlet构造函数而不是init方法来初始化config参数?

在Java中,为什么不能在父类中声明最终成员(不进行初始化),并在子类中设置其值?我该如何解决?

为什么我们不能使用构造函数本身来初始化servlet?

为什么我们不能通过未初始化的局部变量访问静态内容?

为什么要在所有构造函数中显式初始化空白的最终变量?

为什么类数据成员不能通过直接初始化语法初始化?

为什么我不能按顺序在一个文件中初始化两个静态类变量,而不能初始化三个?

为什么Java不允许在构造函数中初始化静态最终变量(例如static final int d)?

为什么编译器不能通过内联优化闭包变量?

为什么派生类的构造函数要在C ++中初始化虚拟基类?

为什么不能通过初始化的参数推断出通用结构类型?

在没有构造函数的类中初始化变量

Java构造函数中类变量的初始化

为什么我的_construct函数无法初始化我的类变量?

为什么我们不能在构造函数初始化列表中初始化静态变量,但可以在构造函数主体中初始化

在闭包内部初始化局部变量

在类的构造函数中初始化ifstream变量

为什么我不能通过传递变量来确定 karma shim 中 require.context 的路径?

为什么我不能通过 JS 函数更改我的内部 HTML?

为什么函数内部的变量没有初始化?

为什么这种类型的最终变量初始化不能在 Java 中编译?

为什么我们不能延迟使用非默认构造函数初始化类成员?

为什么我必须使用 this 关键字来初始化构造函数中的实例变量?

在构造函数中初始化类成员变量

为什么我不能通过 FindViewById 方法初始化 VideoView 对象?

为什么我不能使用构造函数初始化列表来初始化类内结构?