[英]Java enum extends workaround
是否有比這更好的“解決方法”? 訪問TableMap上的方法時,我想避免使用PREFIX(局部變量)。
public class TableMap extends TreeMap<String, String> {
public String field1, field2, field3;
public TableMap(Tables table){}
public void method(){}
public void method2(){}
public void method3(){}
...
}
解決方法!
public enum Tables {
table1, table2, table3;
public final TableMap MAP=new TableMap(this);
private Tables(){}
}
需要!
public enum Tables extends TableMap {
table1, table2, table3;
public Tables(){
super(table);
}
}
整個代碼示例:
// workaround!
Tables.table1.MAP.method();
Tables.table2.MAP.method();
Tables.table3.MAP.method();
...
// needed!
Tables.table1.method();
Tables.table2.method();
Tables.table3.method();
...
在Java中, enum
類型必須擴展java.lang.Enum
。 由於Java類型只能擴展一個類型,因此您可能認為public class TableMap extends Enum
可能有效,但不可以,編譯器不允許這樣做。
在我自己的代碼中,我經常將enum
用作鍵,因為它們是如此敵對。 我讓他們實現了一個通用接口,然后使用工廠來查找我可以使用的“工人”實例的特定實現。
一種更接近所需語法的方法是使用委托模式:
public enum Tables {
...
public void method() {
MAP.method();
}
}
我認為您可能正在嘗試將過多的情報放入enum
。
我發現這種方法非常有用。 它避免了由於不能擴展enum
而引起的許多問題(實際上,您可以但不能以非常有用的方式)。
本質上,使enum
成為子類,並將其特征作為EnumSet
傳遞給您的超類。 這樣,您仍然可以獲得enums
所有好處,包括類型安全。
public static class MappedEnum<E extends Enum<E>> extends TreeMap<String, String> {
public MappedEnum(EnumSet<E> e) {
// Whatever you like with the set.
}
public void method(E e) {
}
}
public static class Foo extends MappedEnum<Foo.Tables> {
public enum Tables {
table1, table2, table3;
}
public Foo() {
super(EnumSet.allOf(Tables.class));
}
@Override
public void method(Foo.Tables e) {
}
}
您甚至可以使用EnumMap
代替TreeMap
來提高效率。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.