您不能讓enum
擴展另一個enum
,並且您不能通過繼承將值「添加」到現有的enum
。
但是,enum
s可以實施interface
s。
我會做的是有原來的enum
實現一個標記interface
(即沒有方法聲明),然後客戶可以創建自己的enum
實現相同interface
。
然後你的enum
值將被它們共同的interface
引用。
爲了加強要求,你可以讓你的接口聲明相關的方法,例如在你的情況,在public String getHTTPMethodType();
行的東西。
這將強制執行enum
s爲該方法提供實現。
此設置加上適當的API文檔應該有助於以相對受控的方式添加功能。
自足例如(不介意這裏的慵懶名)
package test;
import java.util.ArrayList;
import java.util.List;
public class Main {
public static void main(String[] args) {
List<HTTPMethodConvertible> blah = new ArrayList<>();
blah.add(LibraryEnum.FIRST);
blah.add(ClientEnum.BLABLABLA);
for (HTTPMethodConvertible element: blah) {
System.out.println(element.getHTTPMethodType());
}
}
static interface HTTPMethodConvertible {
public String getHTTPMethodType();
}
static enum LibraryEnum implements HTTPMethodConvertible {
FIRST("first"),
SECOND("second"),
THIRD("third");
String httpMethodType;
LibraryEnum(String s) {
httpMethodType = s;
}
public String getHTTPMethodType() {
return httpMethodType;
}
}
static enum ClientEnum implements HTTPMethodConvertible {
FOO("GET"),BAR("PUT"),BLAH("OPTIONS"),MEH("DELETE"),BLABLABLA("POST");
String httpMethodType;
ClientEnum(String s){
httpMethodType = s;
}
public String getHTTPMethodType() {
return httpMethodType;
}
}
}
輸出
first
POST
這將有利於http://stackoverflow.com/a/478431/3138755 – Rahul
當你明確知道可能的已知值的數量時,枚舉是很好的。如果你期望它被擴展,你可能永遠都不應該使用枚舉,並且檢查你當前枚舉的設計目標,並且可能會放棄實現精心設計的界面的類。 –