2012-04-22 93 views
1

是不是就不可能有一个未定义的类型参数e扩展泛型类型:为什么所有的枚举扩展Enum <e>

class Foo extends enum<E> 

他们如何扩大呢?

编辑:也在哪里的values()方法定义?

在此先感谢

+2

你从哪里得到? 'Foo'应该扩展'Enum '。 – bdonlan 2012-04-22 02:00:40

+0

当它创建enum类型的枚举时,是否隐式定义e? – rubixibuc 2012-04-22 02:01:57

+2

这里是java.lang.Enum的来源,如果有帮助:http://www.docjar.com/html/api/java/lang/Enum.java.html – Thilo 2012-04-22 02:02:56

回答

5

这的确是非法使用未定义的类型参数来扩展泛型类型。然而,枚举不这样做。如果你正在反编译一些java代码,并在那里看到一个<E>(并且你的枚举类型没有命名为E),你的反编译器不能正确地处理泛型。

一个枚举暗含延伸Enum<YourEnumType>。也就是说,编译器隐式生成class YourEnumType extends Enum<YourEnumType>。通过向下传递自己的类型,它允许EnumcompareTovalueOf函数拒绝来自不同类型的enum的值。

+0

如果不是枚举泛型中定义的values()方法在哪里? – rubixibuc 2012-04-22 02:08:23

+0

当然在生成的类中。 – bdonlan 2012-04-22 02:11:51

+0

所以这是人为的说话方式? – rubixibuc 2012-04-22 02:12:47