2017-05-17 7 views
1

Ich versuche nicht Nullable Getter mit Nullable Setter und Nullable-Feld zu implementieren.Nullable-Feld mit nicht Nullable Getter

  1. Feld parent kann null sein, was bedeutet, dass die Mutter this ist. Wenn das übergeordnete Element nicht null ist, ist das übergeordnete Element der parent-Wert.
  2. Getter nicht-NULL-Werte zulässt, wie es gibt entweder this oder parent
  3. Setter kann NULL festlegbaren Wert eingestellt, wie es die aktuellen übergeordneten entfernen kann.

Ich versuchte dies:

@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 
    } 

Ich mag nicht die _parent Variable, sondern auch ist es nicht mit dem Setter zu helfen, weil es immer noch nicht-nullable als parent: T ist, so dass die Lösung funktioniert nicht.

+0

Ich weiß nicht, was ORM Sie verwenden, aber die Chancen sind, dass es diese abstrakte Klasse/Schnittstelle erweitert/implementiert, so dass "Eltern" nur eine andere Eigenschaft sein wird. Sie sollten "Eltern" besser als Erweiterungseigenschaft definieren, wenn Sie eine benutzerdefinierte Logik bereitstellen möchten. –

Antwort

3

Derzeit ist es nicht möglich, eine Eigenschaft mit unterschiedlichen Getter- und Setter-Typen zu definieren. Es gibt eine open feature request für diese Funktionalität, aber es ist nicht für eine bestimmte Kotlin-Version geplant.

+0

Was würdest du eigentlich in meinem Fall tun? Was wäre die richtige Lösung in diesem Moment? –

+1

In Ihrem Fall dürfen Sie die Eigenschaftsfunktion von Kotlin nicht nutzen (wegen des Unterschieds in der NULL-Zulässigkeit) und müssen explizit eine getParent- und setParent-Methodensignatur explizit definieren. Und rufen Sie die Java-Art von .getParent() und .setParent (foo) auf. – Ryba