我不确定这是否是提出这个问题的正确论坛,但它是指代码,所以我在这里问。
在“Groovy in action”一节的第7.1.4节(命名参数)中,作者说使用命名参数“在创建具有一些可选参数的不可变类时经常出现”。
类的不变性与可选参数有什么关系?我认为这两个主题是完全正交的。
答案 0 :(得分:2)
在创建具有一些可选参数
的不可变类时经常出现问题
上面的句子有点模糊,因为没有“类参数”,我只能假设它与方法/构造函数参数有关。
当我们谈论构造函数时,Groovy的命名参数在关于可选参数时是有意义的:
@groovy.transform.Immutable
class Person {
String firstName
String lastName
Integer age
}
def p = new Person(age: 42, lastName: 'Doe')
上面的示例演示了如何创建不可变Person
实例。 firstName
未作为命名参数提供,它是可选的。事实上,使用命名参数,可以在进行构造函数调用时指定任何参数组合,而无需实际为所有组合实现构造函数。
还可以在实例/静态方法调用as shown in this blog post by Mr. Haki中使用命名参数。
答案 1 :(得分:1)
该语句的关键是如果你正在处理一个不可变类,那么暗示你只有一次机会设置状态 - 在构造函数中。通常,您可以通过设置器一次一个地操纵(可变)对象来构建所需的状态。对于不可变的,您必须为每个可能的实例化状态集创建一个ctor,而不是像可选参数这样的设施不可用。对于包含许多字段的类,这可能会变得混乱。