EnumMap<E extends Enum<E>, V> map = new EnumMap<E extends Enum<E>, V>(Class<E> keyType)
EnumSet<E extends Enum<E>> set = EnumSet.allOf(Class<E> elementType);
Enum could realize interface:
import java.util.EnumMap;
import java.util.EnumSet;
interface Valuable {
int getValue();
}
enum ENUM implements Valuable {
ENUM1(5),
ENUM2(13);
int value;
ENUM(int value) {
this.value = value;
}
@Override
public int getValue() {
return value;
}
}
/**
* @param <E>: enum implemented Valuable interface
*/
abstract public class Base<E extends Enum<E> & Valuable> {
private final E enums[];
private final EnumMap<E, ?> map;
private Class<E> clazz;
protected RegExpParser(Class<E> clazz) {
int enumSize = EnumSet.allOf(clazz).size();
this.enums = (E[]) new Enum[enumSize];
this.map = new EnumMap<E, Object>(clazz);
this.clazz = clazz;
}
public int getValue(String enumElement) {
E element = Enum.valueOf(clazz, enumElement);
return element.getValue();
}
...
}