2012-04-05 4 views
0

Ich habe eine Eigenschaft mit einem varAnnotation auf einem var in Trait wird nicht in der Unterklasse geerbt

trait Foo { 
    @Id var _id: String 
} 

Jetzt habe ich die var

class Bar(s: String) extends Foo { 
    _id = s 
} 

Aber ich habe diesen Fehler zu initialisieren:

error: class Bar needs to be abstract, since variable _id in class Foo of type String 
is not defined (Note that variables need to be initialized to be defined) class Bar(s: String) extends Foo { 

Der Punkt ist, dass die Annotation geerbt wird, wenn ein Merkmal verwendet wird, und ich möchte es verwenden. Ich möchte einige Merkmale mit einigen Anmerkungen zum Mapping haben und sie in einer Unterklasse verfügbar haben.

Kann jemand eine Idee, Hinweise, Lösung zur Verfügung stellen?

Edit: I forgotted die extends Foo im Beispiel aufschreiben, wie im Kommentar zur Kenntnis genommen. Das Beispiel war also unvollständig.

Edit: Als ich die var im Trait mit @Id var _id: String = _ definieren, dann kann ich schreiben in Bar einfach _id = s und die Anmerkung ordnungsgemäß geerbt. Aber jetzt ist es nicht gezwungen, dass das Feld festgelegt werden muss.

+3

Beachten Sie, dass in dem Beispiel 'Bar' erstreckt sich nicht 'foo', aber in der Fehlermeldung sieht es aus wie es funktioniert. Ist das ein Fehler in Ihrem Beispiel? – Jesper

+0

Ja, das Beispiel war unvollständig. – hellectronic

+0

Ich habe den Titel geändert. Denke, das ist problemspezifischer. – hellectronic

Antwort

6

_id ist eine Zusammenfassung var in Ihrem Merkmal Foo. Setzen Sie var vor ihm in der Klasse Bar:

class Bar(s: String) extends Foo { 
    var _id = s 
} 
+0

Das Problem ist, dass die Annotation nicht vererbt wird. Und ich möchte eine Möglichkeit haben, die Unterklasse _force_ zu initialisieren, um das Feld zu initialisieren. – hellectronic