1

これがこの質問をするのに適切なフォーラムかどうかはわかりませんが、コードについて言及しているので、ここで質問しています。

本「Groovy in action」のセクション 7.1.4 (名前付きパラメーター) で、著者は、名前付きパラメーターの使用は、「オプションのパラメーターを持つ不変クラスを作成する際に頻繁に発生する」と述べています。

クラスの不変性は、オプションのパラメーターと何の関係がありますか? この 2 つのトピックは完全に直交していると思いました。

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

そのステートメントの鍵は、不変のクラスを扱っている場合、コンストラクターで状態を設定する機会が1回しかないことを意味します。通常、セッターを介して(可変)オブジェクトを一度に1つずつ操作して、目的の状態を構築することができます。不変の場合、オプションのparamsなどの機能が利用できない場合は、代わりに、インスタンス化状態の可能なすべてのセットに対してctorを作成する必要があります。多くのフィールドを持つクラスの場合、これは厄介になる可能性があります。

于 2012-11-07T14:50:28.583 に答える