2012-11-05 11 views
9

Eigenschaften in groovy scheinen wie Klassenfelder in Java ohne Zugriffsmodifizierer. Ist das wahr? Oder sie haben eine besondere Bedeutung. Es scheint, als ob es keine Möglichkeit gibt, die Eigenschaften privat zu machen.Was sind "Eigenschaften" in Groovy?

Antwort

3

Eigenschaften können normalerweise wie Felder behandelt werden, aber sie werden tatsächlich durch implizite Getter/Setter unterstützt, sodass Sie sie immer noch wie Felder referenzieren oder sie als Werte festlegen können. Hinter den Kulissen verwenden sie Getter/Setter (die Sie neu definieren können, wenn Sie möchten).

Diese Seite hat Einzelheiten zu Eigenschaften/Feldern und Zugriffsmodifikatoren (siehe insbesondere die „Eigentum und Feldregeln“ Abschnitt): http://groovy.codehaus.org/Groovy+Beans

Es zeigt auch, dass Sie eine Privateigentum (Privat Feld von privaten Getter gesichert machen/setter), aber Sie müssen explizit die Getter/Setter definieren.

+0

Die Bearbeitungswarteschlange für diese Frage ist voll, aber ein aktualisierter (aktuellerer) Link zur Erläuterung von Eigenschaften und Feldern finden Sie hier: http://groovy-lang.org/objectorientation.html#_fields_and_properties –

12

Wenn ein starkes Klassendefinition ein Feld ohne Zugriffs Modifikator erklärt, dann wird ein öffentliche setter/Getter-Methode Paar und ein privates Instanzvariablenfeld erzeugt wird, die auch als „Eigentum“ entsprechend die JavaBeans specification bekannt ist.

Wenn wir ein öffentliches Instanzvariablenfeld deklarieren, erhalten wir nur ein öffentliches Feld ohne ein Setter/Getter-Methodenpaar.

class A { 
    public String field 

    /* 
     public String field 
    */ 
} 

Von einem pov abgefahrene Client, gibt es keinen Unterschied ein Groovy Eigenschaft zwischen den Zugriff auf und ein öffentliches Feld zur Laufzeit

def a = new A() 
println a.field 
println a.property 

obwohl a.field direkt die Instanz-Variable zugreift und a.property ruft tatsächlich a.getProperty() (oder a.setProperty(...) wenn Sie einen Wert zuweisen). Da die Eigenschaft jedoch der JavaBeans-Spezifikation entspricht, kann die Klasse nahtlos in Java-basierten Umgebungen verwendet werden.

Ich sehe nicht viel Sinn darin, ein "Privateigentum" zu machen. private schränkt die Verwendung einer Methode oder Instanz-/Klassenvariable auf den Host-Klassentyp ein. Aber vielleicht hast du damit gemeint, eine private Feldinstanzvariable zu machen.

Verwandte Themen