2016-07-21 7 views
1

私は、親クラスに抽象化しようとしている共有値がいくつかある不変のGroovyクラスを2つ持っています。しかし、私が次のように作成すると、2番目のテストケースは常に失敗します。すべてが正しくコンパイルされ、実行時にエラーはスローされませんが、コンストラクターの親プロパティintを割り当てると、決して設定されず、結果としてNULL値が返されます。私はこれを禁止する文書は見つかりませんでしたが、これも可能ですか?注釈とクラスタイプの設定をいくつか試しました(たとえば、親から抽象クラスを削除するなど)が、@Immutableタグを完全に削除するだけでは不十分です。 ImmutableASTTransformation用コードに基づい親クラスを持つgroovy不変オブジェクト

abstract class TestParent { 
     String parentProperty1 
} 

@ToString(includeNames = true) 
@Immutable 
class TestChild extends TestParent { 
    String childProperty1 
    String childProperty2 
} 


class TestCase { 
    @Test 
    void TestOne() { 
     TestChild testChild = new TestChild(
       childProperty1: "childOne", 
       childProperty2: "childTwo", 
       parentProperty1: "parentOne" 
     ) 

     assert testChild 
     assert testChild.parentProperty1 
    } 
} 

答えて

1

createConstructorMapCommon方法によって追加マップ、引数コンストラクタは、メソッド本体にスーパーへの呼び出し(引数)を含みません。

import groovy.transform.* 

@TupleConstructor 
class A { 
    String a 
} 

@Immutable(knownImmutableClasses=[A]) 
class B { 
    @Delegate A base 
    String b 
} 

def b = new B(base: new A("a"), b: "b") 
assert b.a 
:不変クラスは、あなたがあなたの代わりに相続の組成物を用いることが必要なことをしたい場合は、デフォルト今

に含まれる自己であり、これは、あなたがそれを行うことができる方法の一例であることを意味

私はこれが助けてくれることを願っています:)

関連する問題