2012-09-14 35 views
1

可能重复:
Java enum inheritance如何解决枚举继承问题以重命名它?

我用在具有枚举类型,非常适合我使用库工作,但名称是恐怖和混乱。我可以简单地继承这个枚举来创建一个更好的名字吗?

public enum Settings extends JiggidyWapperfragNautchFrick.SkiddidyBoomCaFriglets { 
} 

像这样? IntelliJ抱怨,当我试图做到这一点,但什么是适当的方式来得到我提议的效果?

+2

我喜欢“Skiddidy Boom”......但看起来像德语和英语交错,至少... –

+0

类似于http://stackoverflow.com/questions/1414755/java-extend-enum 但我正在寻找解决问题的办法。 – Kieveli

+0

@dystroy:当我输入它时,我的手指喜欢CaFriglets。 – Kieveli

回答

3

枚举是最终的类,所以你不能分类他们。我建议把它包装在另一个很好命名的类中。

也许是这样的。通过拥有私有ctor你不能实例化它。

public class Nice { 

    private Nice(){} 

    public static badNamedEnum one(){ 
     return badNamedEnum.badNamedOne; 
    } 

    public static badNamedEnum two(){ 
     return badNamedEnum.badNamedTwo; 
    } 
} 
+0

因此,基本上定义我的枚举与其引用其他枚举的定义值?不是动态的,但它可以工作... – Kieveli

+0

是这样的,或者包装在一个包装enum的类中 – RNJ

+1

'Nice'也可以是另一个枚举(可能甚至将'原始'enum作为其私有构造函数的参数) ,那仍然会有点整洁。 –

4

不,您不能扩展enum类。

唯一的(轻微的)例外是枚举值可以具有特定于值的类体,它有效地创建了一个单独的类,用于扩展原始类enum类。

0

约阿希姆是正确的,但一个枚举可以implement一个接口。

0

枚举用于“硬编码”开关和其他测试。允许子类化是没有意义的,并且会打破目的,因为这可能导致对可能值的不确定性。

+1

他最想要的不是一个子类,而是同一类型的另一个名称。在Java AFAIK中,唯一真正的获取方法是子类化,而这种方法(确实很明显)不适用于最终类。不幸的是,Java没有像C中的typedef这样的东西,或者Haskell等人的类型同义词 –