부울 필드의 경우 getter / setter의 명명 규칙은 무엇입니까?


178

예 :

boolean isCurrent = false;

게터와 세터의 이름은 무엇입니까?


2
@Jigar Joshi의 답변이 올바른 JavaBeans를 참조한다고 가정합니다. 그러나 일반 getter / setter에 대해 질문하는 경우 메소드가 필드의 이름을 포함하고 getter가 인수를 사용하지 않고 값을 리턴하고 setter가 하나의 인수를 사용하여 값을 리턴하지 않거나 오브젝트 자체를 리턴한다는 것이 유일한 장점입니다. getter / setter에 대한 다른 접근 방법의 예로 Buffer를 참조하십시오.
피터 로리

답변:


255

당신이 가지고 있다고 가정

boolean active;

접근 자 방법은

public boolean isActive(){return this.active;}

public void setActive(boolean active){this.active = active;}

또한보십시오


9
부울 게터 이름이 구체적으로 다루어지는 Sun의 코드 규칙 섹션을 가리킬 수 있습니까? 나는 그것을 찾을 수 없었다.
콘스탄틴 펠레 펠린

4
부울 파일이라는 이름을 갖습니다 hasCustomName. 이제 gettersetter 메소드 의 이름을 어떻게 지정해야 합니까? 인가 setHasCustomName[setter]hasCustomName[getter]좋은?
Hadi

@Hadi는 변수 이름을 "customerName"으로 지정하고 getter n setter를 생성합니다. 예상되는 게터와 세터는 다음과 같습니다 public boolean isCustomerName(){return this.customerName;} public void setCustomerName(boolean customerName){this.customerName= customerName;}
Assegd

1
맞춤 이름에서 고객 이름으로 어떻게 이동 했습니까? ;)
Kartik Chugh

1
@Assegd 이름을 "customerName"또는 "customName"으로 지정하는 것은 혼란스럽고 부울임을 나타내지 않습니다. 변수를 보면 이름이 포함될 것으로 예상됩니다. 이 경우 "hasCustomName"IMO라고합니다.
나단

83

http://geosoft.no/development/javastyle.html#Specific

  1. is 부울 변수 및 메서드에는 접두사를 사용해야합니다.

    isSet, isVisible, isFinished, isFound,isOpen

이것은 Java 핵심 패키지에 대해 Sun에서 사용하는 부울 메소드 및 변수의 이름 지정 규칙입니다 . is 접두사를 사용하면 status 또는 flag와 같은 잘못된 부울 이름을 선택하는 일반적인 문제가 해결됩니다. isStatus 또는 isFlag는 적합하지 않으며 프로그래머는보다 의미있는 이름을 선택해야합니다.

부울 변수의 세터 메소드에는 다음과 같이 접 두부가 설정되어 있어야합니다.

void setFound(boolean isFound);

일부 상황에서 더 적합한 is 접두사에 대한 몇 가지 대안이 있습니다. 이들은 접두사를 가지고 있고, 할 수 있고,해야합니다.

boolean hasLicense(); 
boolean canEvaluate(); 
boolean shouldAbort = false;

7
부울 속성이 있으면 hasDatasetter는 어떻게 생겼습니까? 가장 확실하게, setData(bool hasData)나에게는 끔찍하게 잘못 보인다 ...
Franz B.

7
@FranzB. setHasData (...)를 사용합니다
user362178

2
원하는 사람은 자바 빈즈 specifcation 다음의 경우, 그 보인다 has, can, should접두사 사양의 일부가 아닙니다. JavaBeans 사양 1.01 섹션 8.3을 참조 하십시오.
VCD

@ 앤드류 안녕하세요. 변수에 'is'접두사를 사용하고 데이터의 js 파일에서 해당 변수의 값을 보내면 항상 값이 false로 표시됩니다. 그리고 'is'접두사를 제거하면 절대적으로 잘 작동합니다. 그 이유는 무엇입니까? 미리 감사드립니다.
Me_developer

1
setter는 간단합니다. getter boolean isIsCurrent(){...}는 객체를 직렬화 해제하는 데 사용 된 프레임 워크 를 사용해야했기 때문에 불평했습니다 getter not found for property isCurrent.
Maurizio Lo Bosco

67

이라는 필드 isCurrent의 올바른 getter / setter 이름은 setCurrent()/ isCurrent()(적어도 Eclipse가 생각하는 것입니다)이며 매우 혼란스럽고 주요 문제로 다시 추적 할 수 있습니다.

isCurrent먼저 필드를 호출하면 안됩니다 . Is 는 동사이며 동사는 객체의 상태를 나타내는 데 부적합합니다. 대신 형용사를 사용하면 갑자기 getter / setter 이름이 더 의미가 있습니다.

private boolean current;

public boolean isCurrent(){
    return current;
}

public void setCurrent(final boolean current){
    this.current = current;
}

4
부울이 기본 요소가 아닌 경우 어떻게해야합니까? 부울 인 경우 get 또는 is 여야합니까?
Arun

2
아니요, 이러한 메서드는 null을 반환하여 NullPointerException이 발생할 수 있습니다. 하지만 처음에는 부울을 반환하지 않으려 고합니다.
Sean Patrick Floyd

3
@ Arun set / is Boolean 때문에 기본이 아닌 객체 인 경우 설정 / 가져야한다고 생각합니다 .3 개의 통계, false, true 또는 null이 있기 때문입니다.
Al-Mothafar

1
사용하는 IntelliJ에 기본적으로 get를 검색 할 때 접두사를 BooleanisA의boolean
jocull

1
@jocull 그것은 올바른 동작입니다 자바 빈즈 사양에 따라
숀 패트릭 플로이드

6

나는 그것이 될 것이라고 믿습니다 .

void setCurrent(boolean current)
boolean isCurrent()

1
나는 그 관습을 좋아하지만 관습은 실제로 중요하지 않습니다. 가장 중요한 것은 선택한 것을 고수하는 것입니다.
Clement Herreman

4
@Clement Conventions 이러한 규칙을 사용하는 도구에 의존 할 때 중요합니다. JavaBeans는 많은 라이브러리 (JSP / JSF / Spring / Groovy)를 광범위하게 지원하는 규칙입니다. 규칙을 어기는 것은이 라이브러리의 작동 방식을 어기는 것을 의미합니다.
Sean Patrick Floyd

1
구성에 대한 규칙에 의존하는 프레임 워크를 제외하고 @Sean Right. 이 경우 컨벤션은 프레임 워크에 의해 부과되므로 아무 것도 선택하지 않습니다. 좋은 말입니다.
Clement Herreman

5

이 답변을 개정 할 때가 되었을까요? 개인적으로 나는 투표setActive()unsetActive()(대안이 될 수있다 setUnActive(), notActive(), disable()"setActive"이후 등 상황에 따라) 의미 당신은 당신이하지 않는 모든 시간에서 활성화합니다. "setActive"라고 말하는 것은 직관적이지만 실제로는 활성 상태를 제거합니다.

또 다른 문제는 CQRS 방식으로 구체적으로 SetActive 이벤트를 수신 할 수 없으며, 'setActiveEvent'를 수신하고 해당 리스너 내부에서 실제로 활성으로 설정되었는지 여부를 판별해야한다는 것입니다. 또는 전화 할 때 어떤 이벤트를 호출할지 결정 setActive()하지만 문제 분리 원칙에 위배됩니다.

이에 대한 좋은 글은 Martin Fowler의 FlagArgument 기사입니다 : http://martinfowler.com/bliki/FlagArgument.html

그러나 나는 PHP 배경에서 왔으며이 추세가 점점 더 많이 채택되고 있음을 알 수 있습니다. 이것이 Java 개발에 얼마나 많은 영향을 미치는지 확실하지 않습니다.


-1
private boolean current;

public void setCurrent(boolean current){
    this.current=current;
}

public boolean hasCurrent(){
    return this.current;
}

3
현재 무엇을 가지고 있습니까? 나는 hasPOJO가있는 동안 BO 또는 일부 처리가있는 서비스에 사용 되었다고 생각 합니다 is. 답변에 대한 설명을 추가하십시오.
Al-Mothafar

-3
Setter: public void setCurrent(boolean val)
Getter: public boolean getCurrent()

부울의 경우 다음을 사용할 수도 있습니다

public boolean isCurrent()

11
OP에 부울 값에 대한 질문이 있기 때문에. 접두어 값에 'get'접두사가 붙은 getter는 읽지 않아야합니다.
Harold

-4

세터로서 어떻습니까 :

// setter
public void beCurrent(boolean X) {
    this.isCurrent = X;
}

또는

// setter
public void makeCurrent(boolean X) {
    this.isCurrent = X;
}

이 이름이 영어를 모국어로 사용하는 사람에게 적합한 지 잘 모르겠습니다.


1
그들은 실제로
소리를

그러나 일부 속성
보인다
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.