对此问题的评论:A 'for' loop to iterate over an enum in Java声明:
@jacktrades:这是一个隐含的方法,只存在于 编译器。因此基类不能声明一个方法 同名,因此它不会自动包含在内 生成Javadocs。 docs.oracle.com/javase/specs/jls/se7/html/jls-8.html#jls-8.9.2 - Torben 3月5日9:32
由于此方法仅存在于编译器中,这是否意味着它在jumk1.5中可用的Enum对象之前存在?此方法是否仅适用于仅编译器的其他对象。 java.util.Map包含一个values()方法,但是这是记录的,所以是显式的吗?为什么将此方法.values定义为隐式,这对于Enum类型是一个有用的方法,因此它应该是显式的并且可以在Enum对象类型上使用?
答案 0 :(得分:2)
由于此方法仅存在于编译器中,这是否意味着它在jumk1.5中可用的Enum对象之前存在?
不,它是为Java 5添加的。
此方法是否仅适用于仅编译器的其他对象。 java.util.Map包含一个values()方法,但是这是记录的,所以是显式的吗?
那是不同的。 Map.values()
是一种常规方法,是Map
接口的一部分。对于任何枚举类型,values()是静态方法。关键的区别在于静态方法不是继承的,因此将values()
添加到java.lang.Enum会没有帮助。另一种隐含方法是[EnumType].valueOf(String name)
。
为什么要将此方法.values定义为隐式,这对于枚举类型是一个有用的方法,所以它应该是显式的?
同样,它不可能是显式的,因为静态方法不是继承的。对于valueOf
,valueOf(class<T> type, name)
中有一个模拟java.lang.Enum
方法。我不确定为什么那里没有values(class<T> type)
;这对我来说是有道理的。但相反,有Class.getEnumConstants()
,它做同样的事情。