Java에서 열거 형의 이름 지정 : 단수 또는 복수?


184

Java 열거 형의 이름을 지정하는 방법에 대한 "공식적인"권장 사항이 있습니까?

enum Protocol { HTTP, HTTPS, FTP }

또는

enum Protocols { HTTP, HTTPS, FTP }

.Net 세계에서 권장 사항은 비트 플래그를 나타내는 열거 형을 제외하고 단수를 사용하는 것입니다. Java에 비슷한 것이 있는지 궁금합니다.

.Net에만 해당되는 관련 질문 : 열거 형에 대해 단수 또는 복수?


3
여기에서 답변을 찾을 수 있습니다 . 열거 형은 클래스이므로 동일한 방식으로 선언해야합니다.
bsiamionau

답변:


220

Java의 열거 형 (일반적으로 열거 형)은 단수 여야합니다. 생각은 여러 프로토콜을 선택하는 것이 아니라 값 목록에서 선택할 수있는 프로토콜 중 하나를 선택하는 것입니다.

복수가없는 것에 주목하십시오 : http://docs.oracle.com/javase/tutorial/java/javaOO/enum.html


2
Microsoft는 대략 .NET 프로그래밍에 대해 같은 의견을 유지하는 것 같다 stackoverflow.com/a/1336012/279112
Panzercrisis

TimeUnit 은 복수형을 어떻게 사용합니까? 예 : DAYS, HOURS...
theyuv

4
값은 복수이고, 열거 형 자체는 그렇지 않습니다 :-)
Calvin

21

데이터베이스 또는 Java의 클래스에서 테이블 이름을 정의 할 때 열거 형에 대해 단수를 사용하는 것과 동일한 방법으로 최상의 옵션입니다. 사용 방법을 참조하십시오.

예제를 작성해 봅시다 :

public enum Day {
SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY
}

class Appointment {
private Day day;

public void setDay(Day day) {
    this.day = day;
}
}

단수형으로 하루 속성의 의도를 분명히 알 수 있습니다. "일"은이 약속이 열리는 요일입니다. 그렇지 않으면이 방법의 서명이 Day (Days day)로 설정되어 있고 약속이 하루 이상 발생할 수 있는지 많은 사람들이 궁금해 할 것입니다.

회사에서 48 시간 근무하는 경우 다음과 같이 정의 할 수 있습니다.

public enum Days {
MONDAY_TUESDAY, WEDNESDAY_THURSDAY, FRIDAY_SATURDAY
}

그렇게하면 근무일을 설정할 수 있습니다. 그러나 여전히 이상하게 보일 것이며 더 나은 옵션이 있으며 단수형을 사용하는 것입니다.

public enum Shift {
MONDAY_TUESDAY, WEDNESDAY_THURSDAY, FRIDAY_SATURDAY
}

이제 실제로 열거 형의 의미를 보여줍니다. 일반적으로 모든 도메인에서 열거 형의 각 상수가 하나의 요소이기 때문에 열거 형에 단수를 사용하는 것이 가장 좋습니다.

.NET도 언급했습니다. .NET에서 "플래그"열거 형은 해당 열거 형을 매개 변수로 기대할 때 실제로 얻는 것은 해당 열거 형의 요소 목록 (정수로 저장 됨)임을 의미합니다.

// Define an Enum with FlagsAttribute.
[FlagsAttribute] 
enum MultiHue : short
{
    Black = 0,
    Red = 1,
    Green = 2,
    Blue = 4
};

public void setMultiHue(MultiHue hues);

Java에서도 똑같이 할 수 있지만 열거 형은 여전히 ​​단수입니다.

public enum Hue {
BLACK, RED, GREEN, BLUE;
private final Integer hue;

Hue() {
    this.hue = 1 << this.ordinal();
}

public Integer toFlag() {
    return this.hue;
}
}

public class MultiHue {
private Integer hues = 0;

public void addHue(Hue hue) {
    this.hues |= hue.toFlag();
}

public boolean hasHue(Hue hue) {
    return (this.hues & hue.toFlag()) != 0;
}
}

Java 로이 작업을 수행하는 데 더 쉽고 명확한 (더 많은 메모리를 사용하더라도) List를 사용하는 것입니다.


2
실제로이 작업을 수행하는 더 좋은 방법은 BitSet을 캡슐화하고 모든 것을 처리하는 EnumSet입니다. :-)
corsiKa
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.