2012-11-05 14 views
9

Właściwości w groovy wydają się jak pola klasy w java bez modyfikatora dostępu. Czy to prawda? Lub mają specjalne znaczenie. Wygląda na to, że nie ma możliwości, aby właściwości były prywatne?Co to są "właściwości" w Groovy?

Odpowiedz

3

Właściwości mogą być normalnie traktowani jak dziedzinach, ale w rzeczywistości są one poparte ukrytych pobierające/ustawiające, więc nadal można odwoływać się do nich jak pola lub ustawić je równa wartości. Za kulisami używają funkcji pobierających/ustawiających (które możesz przedefiniować, jeśli chcesz).

Ta strona zawiera szczegółowe informacje na temat właściwości/pól i modyfikatory dostępu (patrz zwłaszcza „zasady własności i pola” sekcji): http://groovy.codehaus.org/Groovy+Beans

To pokazuje również, że można dokonać własności prywatnej (pole prywatne wspierane przez prywatne pobierające/setters), ale musisz jasno określić definicje modułów pobierających/ustawiających.

+0

Edit kolejka na to pytanie jest pełna, ale uaktualniony (bardziej aktualne) Link do wyjaśnienia właściwości vs pól jest tutaj: http://groovy-lang.org/objectorientation.html#_fields_and_properties –

12

Gdy definicja klasy Groovy deklaruje pole bez modyfikatora dostępu, generowana jest publiczna para zmiennych ustawiających/pobierających i prywatne pole zmiennej instancji, które jest również znane jako "właściwość" zgodnie z JavaBeans specification.

class A { 
    String property 

    /* 
     private String property 

     public void setProperty(String property) { ... } 
     public String getProperty() { ... } 
    */ 
} 

Jeśli deklarujemy wystąpienie publiczne zmienne pole my po prostu pole publicznego, bez metodę pary setter/getter.

class A { 
    public String field 

    /* 
     public String field 
    */ 
} 

Od POV groovy klienta, nie ma żadnej różnicy pomiędzy dostępu właściwość Groovy i pole publicznego w czasie wykonywania

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

chociaż a.field dostęp zmiennej instancji bezpośrednio i a.property faktycznie nazywa a.getProperty() (lub a.setProperty(...) podczas przypisywania wartości). Ale ponieważ właściwość jest zgodna ze specyfikacją JavaBeans, klasa może być bezproblemowo używana w środowiskach opartych na Javie.

nie widzę większego sensu w tworzeniu „własności prywatnej”. private ogranicza użycie metody lub instancji/klasy do typu klasy hostingu. Ale może miałeś na myśli tworzenie zmiennej prywatnej instancji pola.