「値」が同じ 2 つの定数を持つ列挙型を定義したいと考えています。これら 2 つの定数を重複と呼びます。次の例を考えてみましょう: ブラウザーの種類のリストを定義したいのですが、以下のように、リテラルの "IE" と "InternetExplorer" の両方が必要です。
enum Browser {
CHROME("chrome"),
FIREFOX("firefox"),
IE("ie"),
INTERNETEXPLORER("ie");
String type;
Browser(String type) {
this.type = type;
}
}
ただし、これでは、次のコードは失敗します。
Browser a = Browser.IE;
Browser b = Browser.INTERNETEXPLORER;
Assert.assertTrue(a==b);
考えられる唯一の回避策は、ブラウザー インスタンスの内部値を返す型のvalue()
メソッドを追加することです。Browser
そして、等価テストコードは次のようになります
Assert.assertTrue(a.value()==b.value())
これは良くありません。それで、誰かがより良い考えを持っていますか?
equals()
JavaがEnum<T>
クラスのようなメソッドをオーバーライドできないのはなぜですか?
編集:
OK、回答とコメントをありがとう。私の当初の考えが列挙型の目的に反していたことに同意します。次の変更が私のニーズを満たすことができると思います。
public enum Browser {
CHROME,
FIREFOX,
IE;
public static Browser valueOfType(String type) {
if (b == null) {
throw new IllegalArgumentException("No browser of type " + type);
switch (type.toLowerCase()) {
case "chrome":
return Browser.CHROME;
case "firefox":
return Browser.FIREFOX;
case "ie":
case "internetexplorer":
case "msie":
return Browser.IE;
default:
throw new IllegalArgumentException("No browser of type " + type);
}
}
}