为什么编译器在Java中生成Enums?
发布时间:2020-12-15 08:44:57 所属栏目:Java 来源:网络整理
导读:我真的明白它无法扩展任何类来实现枚举,因为这意味着有多重继承.但我不明白的是,为什么编译器在使用“enum”而不是“class”时创建的枚举类是最终的. 是否有任何理由不能延长枚举? 另外:有没有办法在没有Copy Paste的情况下为不同的枚举实现常见行为? 解
我真的明白它无法扩展任何类来实现枚举,因为这意味着有多重继承.但我不明白的是,为什么编译器在使用“enum”而不是“class”时创建的枚举类是最终的.
是否有任何理由不能延长枚举? 另外:有没有办法在没有Copy& Paste的情况下为不同的枚举实现常见行为? 解决方法
枚举的一个非常重要的方面是数字或值在编译时是已知的(至少在枚举的编译时).
所以如果你有这样的枚举: public enum Foo { BAR,BAZ; } 然后你知道它有两个值:BAR和BAZ. 如果你可以扩展枚举,那么你可以引入一个添加QUUX的ExtendedFoo枚举.现在,由于ExtendedFoo将是Foo,QUUX将突然成为有效的Foo值.没有什么能阻止你添加任何额外的Foo值. 这意味着编译器无法再检查您的开关是否涵盖所有Foo案例.类似的静态分析步骤也不再可能.实际上,你的枚举将不再是一种特殊的类型,并且对于具有一些预定义实例的普通类,差别很小. 旁注:生成的枚举类是not always (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容