Мені здається, що булевий клас - ідеальний кандидат, який можна реалізувати як ентум.
Дивлячись на вихідний код, більшість класів - це статичні методи, які можна перемістити без змін до перерахунку, решта стають набагато простішими як перерахунки. Порівняйте оригінал (коментарі та статичні методи видалено):
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";
}
}
Чи є якась причина, чому Бул не міг стати перелюбом?
Якщо це код Sun для заміщення методу equals (), то він пропускає дуже фундаментальну перевірку порівняння посилань двох об'єктів перед порівнянням їх значень. Ось так я думаю, що метод equals () повинен бути:
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (obj instanceof Boolean) {
return value == ((Boolean)obj).booleanValue();
}
return false;
}
if
), але з точки зору концептуальної / типової точки зору булеві та перерахунки - це обидва типи типів суми, тому я думаю, що справедливо запитати, чому вони не Не подолайте розрив між ними.
valueOf(String)
(що суперечило б значенню enf) і магію, за getBoolean
якою це може зробити так, що Boolean.valueOf("yes")
повертає справжнє, а не хибне. Обидві вони є частиною 1,0 специфікації та потребують відповідної сумісності ззаду.