public enum Attr{
id(true);
private req;
Attr(){
req = false;
}
Attr(boolean isreq){
req = isreq;
}
boolean isRequired(){
return req;
}
}
public enum SomeAttr extends Attr{
name(true),
parent;
}
Примерно так, можно конечно тупо написать класс в который компилятор развораичивает enum.
Вообще я был на недавном выступлении Блоха - он там говорил что это error-prone way (есть ряд причин) =) если уж так надо - то конструкция на классах а не на енамах не будет принципиально хуже.
Ну, определяя enum ты можешь быть уверен, что если ты в методе просишь аргумент этого типа, то ничего, кроме перечисленных значений на вход не прилетит. Если же можно будет наследоваться, такой уверенности не будет. Если код изначально пишется со знанием этого, то проблем не будет. Но могут быть проблемы со старым кодом. Простейший пример:
public enum Something{EL1,EL2};
...
public void foo(Something smth)
{
...
if(smth == Something.EL1)
...
else
...
}
Если есть наследование, надо будет дописать else if(smth == Something.EL2) и ещё потом просто else.