セルバンシーザー:
私はお互いに依存してプロパティを持つGroovyのクラスを構築し、一つの特性を持ってしようとしています。しかし、私は常にnullまたはデフォルト値を取得するように見えます。I「はこの」キーワードを使用してみましたが、私は根本的な何かが欠けています。私はそれはおそらく、インスタンス変数とは何かを持って知っています。
私は次のことを持っていると言います。
class BaseClass {
String jobName
String jobDescription = jobName + '-description'
}
私はクラスをインスタンス化し、両方の属性を宣言すると、すべてが動作します:
new BaseClass().with {
jobName = 'test-job'
jobDescription = 'Sample description'
}
私は唯一のジョブ名プロパティをインスタンス化した場合でも、説明はNULLを使用しています。だから、それはヌル記述 "になります。
私は、オブジェクトをインスタンス化し、Iドンは」私が作成したすべてのオブジェクトのために自分自身を繰り返す必要がありますのでジョブ名プロパティを使用することができる方法はありますか?
cfrick:
私はあなたがセッターをオーバーライドして最高のオフになっていると思うjobName
し、その後守備説明を設定します。例えば
class BaseClass {
String jobName
String jobDescription
void setJobName(String jobName) {
this.jobName = jobName
if (!jobDescription) {
jobDescription = "${jobName}-description"
}
}
}
assert new BaseClass().tap{ jobName = 'test-job' }.jobDescription == 'test-job-description'
属性のデフォルトは、オブジェクトの構築時に行われている-期待どおりの試みがうまくいかない理由は起こって物事の流れにあります。だから、(内部の後に仕事を設定するwith
)(それは新しい入力から再計算されません)は効果がありません。
別のオプションは、(例えば、デフォルトの記述を作成するために、c'torでこの問題に最終的な契約を使用)コンストラクタベースのアプローチになります