2017-05-17 15 views
1

nullable setterおよびnullableフィールドを持つnullable getterを実装しようとしています。nullable getterを持つnullableフィールド

  1. フィールドparentはnullにすることができます。つまり、親はthisです。 parentがnullでない場合、親はparentの値です。
  2. ゲッターが返されるのは、thisまたはparent
  3. です。Setterは、現在の親を削除できるため、null値を設定できます。

    @ManyToOne(fetch = FetchType.EAGER) 
    
    @JoinColumn(name = "parent_id") 
    var _parent: T? = null 
    var parent: T 
        get() = if (isParent) this as T else _parent!! 
        set(value) { 
         _parent = if (value == null) null else value.parent 
        } 
    

    私は_parent変数を好きではないが、それはまだparent: Tとして、NULL可能でないためにも、それは、セッターとの助けにはならない、そう:

は、私は、これは試してみました解決策は機能しません。

+0

使用しているORMはわかりませんが、この抽象クラス/インタフェースを拡張/実装している可能性があるので、 'parent'は単なる別のプロパティになります。カスタムロジックを提供したい場合は、 'parent'を拡張プロパティにすることをお勧めします。 –

答えて

3

現在、ゲッターとセッターの種類が異なるプロパティを定義することはできません。この機能にはopen feature requestがありますが、特定のKotlinバージョンは予定されていません。

+0

私の場合、あなたは実際に何をしますか?この時点で正しい解決策は何でしょうか? –

+1

あなたのケースでは、kotlinのプロパティ機能を利用することはできません(null許容性の違いのため)、実際にはgetParentとsetParentメソッドのシグネチャを明示的に定義する必要があります。また、.getParent()と.setParent(foo)のjavaメソッドを呼び出す。 – Ryba