1

我不确定这是否是提出这个问题的正确论坛,但它指的是代码,所以我在这里问。

在“Groovy in action”一书的第 7.1.4 节(命名参数)中,作者说命名参数的使用“在创建具有一些可选参数的不可变类时经常出现”。

类的不变性与可选参数有什么关系?我认为这两个主题是完全正交的。

4

2 回答 2

2

在创建具有一些可选参数的不可变类时经常出现

上面的句子有点模糊,因为没有“类参数”之类的东西,我只能假设它与方法/构造函数参数有关。

当我们谈论构造函数时,Groovy 的命名参数在涉及可选参数时是有意义的:

@groovy.transform.Immutable
class Person {

String firstName
String lastName
Integer age
}

def p = new Person(age: 42, lastName: 'Doe')

上面的例子展示了如何创建一个不可变的Person实例。firstName不作为命名参数提供,它是可选的。实际上,使用命名参数可以在调用构造函数时指定任何参数组合,而无需实际为所有组合实现构造函数。

也有可能在实例/静态方法调用中使用命名参数,如 Haki 先生的这篇博文所示

于 2012-11-07T09:51:51.857 回答
1

该声明的关键在于,如果您正在处理一个不可变类,则意味着您只有一次机会设置状态 - 在构造函数中。通常,您可以一次一个地通过设置器操作(可变)对象,以建立所需的状态。对于不可变的,如果没有像可选参数这样的工具,则必须为每个可能的实例化状态集创建一个 ctor。对于具有许多字段的类,这可能会变得混乱。

于 2012-11-07T14:50:28.583 回答