2012-11-05 4 views
9

groovy의 속성은 액세스 수정자가없는 java의 클래스 필드와 비슷합니다. 그게 사실이야? 아니면 특별한 의미가 있습니다. 속성을 비공개로 설정할 수있는 방법이없는 것 같습니다.Groovy의 '특성'은 무엇입니까?

답변

3

속성은 일반적으로 필드처럼 취급 할 수 있지만 암시 적 getters/setters가 실제로 지원하므로 필드와 같은 값을 참조하거나 값과 동일하게 설정할 수 있습니다. 배후에서 그들은 getter/setters를 사용하고 있습니다. http://groovy.codehaus.org/Groovy+Beans

그것은 또한 당신이 개인 게터 기본으로하는 개인 재산 (private 필드를 만들 수 있음을 보여줍니다 :

이 페이지는 속성/필드 및 액세스 수정에 대한 자세한 내용 (특히 "속성과 필드 규칙"절 참조)가/setters)하지만 getters/setter를 정의 할 때는 명시 적이어야합니다.

+0

이 질문에 대한 편집 대기열은 가득 찼지만 속성 대 필드를 설명하는 업데이트 된 (최신) 링크가 있습니다 : http://groovy-lang.org/objectorientation.html#_fields_and_properties –

12

Groovy 클래스 정의에서 액세스 한정자가없는 필드를 선언하면 JavaBeans specification에 따라 "속성"이라고도하는 공용 설정자/가져 오기 방법 쌍과 개인 인스턴스 변수 필드가 생성됩니다.

class A { 
    String property 

    /* 
     private String property 

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

공용 인스턴스 변수 필드를 선언하는 경우 setter/getter 메서드 쌍을 사용하지 않고 공용 필드 만 가져옵니다.

그루비 클라이언트의 POV에서
class A { 
    public String field 

    /* 
     public String field 
    */ 
} 

,이 런타임에 그루비 속성과 공공 필드를 액세스하는 사이에 차이가 a.field 비록

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

직접 인스턴스 변수에 액세스하지 않으며 a.property 실제로 a.getProperty()를 호출 (또는 a.setProperty(...) 값을 지정할 때). 그러나 속성이 JavaBeans 사양을 준수하기 때문에이 클래스는 Java 기반 환경에서 원활하게 사용할 수 있습니다.

나는 "사유 재산"을 만드는 데별로 감각이 없습니다. private은 메서드 또는 인스턴스/클래스 변수의 사용을 호스팅 클래스 유형으로 제한합니다. 그러나 아마도 당신은 private 필드 인스턴스 변수를 만드는 것을 언급하고있을 것입니다.

관련 문제