2012-11-05 2 views
9

Groovy'deki özellikler, erişim değiştiricisi olmayan java'da sınıf alanları gibi görünüyor. Bu doğru mu? Ya da özel bir anlamı var. Özellikleri özel yapmak için bir yolu yok gibi görünüyor?Groovy'de 'özellikler' nelerdir?

cevap

3

Özellikler normal olarak alanlar gibi ele alınabilir, ancak bunlar aslında örtülü alıcılar/setleyiciler tarafından desteklenir, böylece bunları hala alanlar gibi referans alabilir veya değerlere eşit olarak ayarlayabilirsiniz. Sahnelerin ardında, alıcılar/ayarlayıcılar kullanıyorlar (eğer ilgilenirseniz yeniden tanımlayabilirsiniz). http://groovy.codehaus.org/Groovy+Beans

Ayrıca özel alıcılar tarafından desteklenen özel mülkiyeti (özel alan yapabileceği gösterilmektedir:

Bu sayfa özellikleri/alanları ve erişim değiştiricileri ilgili ayrıntıları (özellikle "Mülkiyet ve saha kuralları" bölümüne bakın) sahiptir/setters), ancak alıcıları/ayarlayıcıları tanımlamakta açık olmalısınız.

+0

Bu soru için sırayı düzenle dolu, ancak alanlara vs açıklamak için güncellenmiş (daha güncel) bir bağlantı burada: http://groovy-lang.org/objectorientation.html#_fields_and_properties –

12

Groovy sınıf tanımı, erişim değiştiricisi olmayan bir alanı bildirdiğinde, JavaBeans specification'a göre "property" olarak da bilinen bir public setter/getter yöntem çifti ve özel örnek değişken alanı oluşturulur.

class A { 
    String property 

    /* 
     private String property 

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

biz ayarlayıcı/alıcı yöntemi çifti olmadan sadece bir kamu alanı açıp bir ortak örnek değişken alanını beyan edin.

bir Groovy müşterinin pov itibaren
class A { 
    public String field 

    /* 
     public String field 
    */ 
} 

, orada zamanında bir Groovy mülk ve kamu alanı erişmek arasındaki fark a.field rağmen

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

doğrudan örnek değişkeni erişir ve a.property aslında a.getProperty() çağırır (veya a.setProperty(...) bir değer atarken). Ancak özellik JavaBeans özelliklerine uygun olduğu için, sınıf, Java tabanlı ortamlarda sorunsuzca kullanılabilir.

"Özel mülkiyet" oluşturmayla ilgili pek bir şey görmüyorum. private, barındırma sınıfı türüne bir yöntem veya örnek/sınıf değişkeninin kullanımını kısıtlar. Ama belki de özel bir alan örneği değişkeni yapmaktan bahsediyordunuz.