2009-07-13 4 views
15

클래스에 "blah"라는 변수가 있으면 표준 getter/setter 구문은 분명 getBlah() 및 setBlah()입니다. 그러나 isBlah라는 변수가있는 POJO 클래스가 있으면 다음과 같이 사용합니다.POJO 클래스의 "is"변수 getter/setter에 대한 올바른 구문은 무엇입니까?

public type getIsBlah() { 
    return isBlah; 
} 

public setIsBlah(type isBlah) { 
    this.isBlah = isBlah; 
} 

아니면 이럴 수 있습니까?

public type isBlah() { 
    return isBlah; 
} 

public setBlah(type blah) { 
    this.isBlah = blah; 
} 

첫 번째는 POJO 규칙을 엄격히 준수 할 것 같다,하지만이 클래스의 게터/세터를 만들기 위해 (그리고 헤이, 인 IntelliJ 나를 아직 실망시키지 않았다 그것을 요구하는 경우 두 번째 유형 인 IntelliJ가 생성하는 것입니다 :]). 그렇다면 선호되는 구문은 무엇입니까?

답변

20

속성을 사용하는 한 가지 이유는 구현에서 API를 분리하는 것입니다. 즉, 사적인 변수가 호출되는 것에 구속을받지 않아야합니다. 그것은 코드 유지 보수자가 읽을 수있는 것 이상으로 명명을 알려주지 않아야합니다.

"type"이 boolean 인 경우 두 번째 양식이 올바른 것입니다. 이 아니고boolean 인 경우 getXXX을 사용해야합니다.하지만 getIsXXX은 사용하지 않을 것입니다. 나에게 "is"는 부울 속성과 매우 강력한 대응 관계를 가지고 있으며 다른 컨텍스트에서이 속성을 사용하면 다른 도구에 영향을 줄 수있는 JavaBeans 규칙을 위반할뿐만 아니라 IMO를 오도하는 것입니다.

+3

자바 빈즈 협약을 깨기 위해 +1 –

+5

@Vincent : 나는 "협약 - 브레이커"가 아닌 "자바 빈즈 협약을 위반할 것이라고 언급 한 +1"이라고 생각한다. :) –

3

POJO에 대한 강력한 규정은 없지만 JavaBeans의 경우 두 번째 (IntelliJ) 예제는 부울 속성의 표준이며 다른 모든 것은 getX을 사용합니다.

2

두 번째 옵션도 선택합니다. 첫 번째는 getIsBlah()으로 말하며 중복됩니다.

1

실제로 "get"과 "is"는 모두 JavaBeans 규칙에 따라 기술적으로 허용 가능하므로 실제로는 문제가 없습니다. 나는 당신의 "어쩌구 (Blah)"가 실제로 어떤 단어인지에 따라, 더 좋거나 더 자연스럽게 들린다.

3

JSTL을 사용하는 경우 "is"구문에 큰 문제가 있습니다. JSTL EL은이를 인식하지 못합니다. 그것은 꽤 어리 석었지만 JSTL EL 디자이너는 javabeans 준수에 대한 논리를 확인하지 않았습니다.

JSTL에 후크를 제공하기 위해 isBlah()를 호출하는 뷰 계층 클래스에 getIsBlah() 메소드를 작성하는 경우가 종종 있습니다. 그것은 끔찍한 일입니다.

+1

이 문제는 최신 JSTL에서 계속 유지됩니까? –

+0

JSTL 자체보다는 JSP EL에 더 문제가 있긴하지만 저는 그렇게 믿습니다. – skaffman

+0

나는 더 이상 그런 경우가 아니라고 확신한다. – harmanjd

4

필드 이름은 JavaBean specification과 완전히 관련이 없습니다. getter/setter의 이름 만 관련됩니다.

일반적으로 getter의 이름은 get<PropertyName>()입니다. boolean 속성에 대해서만 is<PropertyName>()을 사용할 수 있습니다.

getter를 호출 할 때 Bean 속성 이름이 "Blah"이고 getter를 호출 할 때 "IsBlah"인 경우 getIsBlah()입니다.

개인적으로 나는 보통 isBlah()을 선호합니다.

0

JSTL은 isMyBool이 부울 또는 부울이 아닌 다른 객체 인 경우 Bean 스펙에 따라 허용합니다. (원시 vs 객체).

0

즉, JAXB가 잘못된 코드를 생성합니다. Boolean 속성을 만들지 만 null 허용이 가능하지만 getter의 이름을 isXXX()으로 지정하여 Bean 사양을 위반합니다.

관련 문제