부울 클래스는 열거 형으로 구현하기에 이상적인 후보 인 것 같습니다.
소스 코드를 살펴보면 대부분의 클래스는 정적 메서드이며 열거 형으로 변경되지 않고 나머지는 열거 형으로 훨씬 간단 해집니다. 원본과 비교 (설명 및 정적 메소드 제거) :
public final class Boolean implements java.io.Serializable,
Comparable<Boolean>
{
public static final Boolean TRUE = new Boolean(true);
public static final Boolean FALSE = new Boolean(false);
private final boolean value;
public Boolean(boolean value) {
this.value = value;
}
public Boolean(String s) {
this(toBoolean(s));
}
public boolean booleanValue() {
return value;
}
public String toString() {
return value ? "true" : "false";
}
public int hashCode() {
return value ? 1231 : 1237;
}
public boolean equals(Object obj) {
if (obj instanceof Boolean) {
return value == ((Boolean)obj).booleanValue();
}
return false;
}
public int compareTo(Boolean b) {
return compare(this.value, b.value);
}
}
열거 형 버전으로 :
public enum Boolean implements Comparable<Boolean>
{
FALSE(false), TRUE(true);
private Boolean(boolean value) {
this.value = value;
}
private final boolean value;
public boolean booleanValue() {
return value;
}
public String toString() {
return value ? "true" : "false";
}
}
부울이 열거 형이 될 수없는 이유가 있습니까?
이것이 equals () 메소드를 대체하는 Sun 코드 인 경우, 값을 비교하기 전에 두 오브젝트의 참조를 비교하는 매우 기본적인 점검이 누락되었습니다. 이것은 equals () 메소드가 다음과 같아야한다고 생각합니다.
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (obj instanceof Boolean) {
return value == ((Boolean)obj).booleanValue();
}
return false;
}
if
) 처리에 대한 특수 문이 있기 때문에 Java에서는 무의미 하지만 개념 / 유형 이론 관점에서 부울과 열거 형은 모두 합계 유형의 인스턴스이므로 그 이유를 묻는 것이 공정하다고 생각합니다. 그들 사이의 간격을 메 우지 마십시오.
valueOf(String)
뒤에 (열거 형의 valueOf과 충돌)과 마술 getBoolean
하는 너무 것을 할 수 있습니다 Boolean.valueOf("yes")
오히려 거짓보다는 true를 돌려줍니다. 둘 다 1.0 사양의 일부이며 적절한 이전 버전과의 호환성이 필요합니다.