예, 마치 열거 형의 각 값에 대해 싱글 톤 인스턴스를 만든 것과 같습니다.
public abstract class RoundingMode {
public static final RoundingMode HALF_UP = new RoundingMode ();
public static final RoundingMode HALF_EVEN = new RoundingMode ();
private RoundingMode () {
// 전용 범위는이 클래스 외부의 모든 하위 유형을 방지합니다.
}
}
그러나 의 enum
구조는 당신에게 다양한 혜택을 제공합니다 :
- 각 인스턴스의 toString ()은 코드에 지정된 이름을 인쇄합니다.
- (다른 게시물에서 언급했듯이) enum 유형의 변수는
switch-case
제어 구조를 사용하여 상수와 비교할 수 있습니다 .
- 열거 형의 모든 값은
values
각 열거 형 유형에 대해 '생성 된'필드를 사용하여 쿼리 할 수 있습니다.
- 다음은 큰 wrt ID 비교입니다. 열거 형 값은 복제없이 직렬화를 유지합니다.
연재는 큰 고치 야. 열거 형 대신 위의 코드를 사용하는 경우 ID 평등이 작동하는 방식은 다음과 같습니다.
RoundingMode 원본 = RoundingMode.HALF_UP;
assert (RoundingMode.HALF_UP == 원본); // 통과
ByteArrayOutputStream baos = 새로운 ByteArrayOutputStream ();
ObjectOutputStream oos = 새로운 ObjectOutputStream (baos);
oos.writeObject (원본);
oos.flush ();
ByteArrayInputStream bais = new ByteArrayInputStream (baos.toByteArray ());
ObjectInputStream ois = new ObjectInputStream (bais);
RoundingMode deserialized = (RoundingMode) ois.readObject ();
assert (RoundingMode.HALF_UP == 역 직렬화 됨); // 실패
assert (RoundingMode.HALF_EVEN == 역 직렬화 됨); // 실패
당신은 할 수 관련된 기술을 사용하여, 열거하지 않고이 문제를 해결 writeReplace
하고 readResolve
, (참조 http://java.sun.com/j2se/1.4.2/docs/api/java/io/Serializable.html를 ) ...
요점은-Java가 동등성을 테스트하기 위해 열거 형 값의 ID를 사용할 수 있도록하는 것입니다. 권장되는 연습입니다.