Non è possibile avere un enum
estendere un altro enum
e non è possibile "aggiungere" valori a uno esistente enum
tramite ereditarietà.
Tuttavia, enum
s può implementare interface
s.
Quello che vorrei fare è avere l'originale enum
implementare un marcatore interface
(vale a dire senza dichiarazioni di metodo), allora il vostro cliente potrebbe creare la propria enum
attuazione della stessa interface
.
Quindi i valori enum
saranno indicati dal loro comune interface
.
Al fine di rafforzare i requisiti, è possibile che l'interfaccia dichiari metodi pertinenti, ad es. nel tuo caso, qualcosa nelle linee di public String getHTTPMethodType();
.
Ciò imporrebbe l'implementazione di enum
s per fornire un'implementazione per tale metodo.
Questa impostazione accoppiato con una documentazione API adeguata dovrebbe contribuire ad aggiungere funzionalità in modo relativamente controllato.
autonomo esempio (non mente i nomi pigri qui)
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;
}
}
}
uscita
first
POST
questo sarà utile http://stackoverflow.com/a/478431/3138755 – Rahul
Le enumerazioni sono buone quando si è certi del numero di valori possibili noti a priori.Se ti aspetti che venga esteso, probabilmente non dovresti mai usare le enumerazioni, e rivedere l'argomento per cui è progettata l'enumerazione attuale e probabilmente lasciarlo in favore delle classi che implementano un'interfaccia ben progettata. –