2013-11-14 77 views
0

在这个问题上意见:A 'for' loop to iterate over an enum in Java状态:什么是编译器隐式方法?

@jacktrades:这是只存在于 编译器的隐式方法。因此,基类不能声明一个名称相同的方法,因此它不会包含在生成的Javadoc中的自动生成的 中。 docs.oracle.com/javase/specs/jls/se7/html/jls-8.html#jls-8.9.2 - 托本3月5日在9:32

由于这种方法仅在存在编译器是否意味着它在jumk1.5中的Enum对象变得可用之前就存在了?此方法是否仅适用于仅编译器的其他对象? java.util.Map包含一个values()方法,但是这是记录的,所以是明确的?为什么将这个方法的值定义为隐含的,这对Enum类型是一个有用的方法,所以它应该在Enum对象类型上是显式的和可用的?

回答

2

由于这种方法只存在于编译器中,这是否意味着在Enum对象在jdk1.5中可用之前存在?

不,它增加了对Java 5

这是否存在方法对于那些仅有的编译器的其他对象。 java.util.Map包含一个values()方法,但是这是记录的,所以是明确的?

这是不同的。 Map.values()是一种常规方法,是Map接口的一部分。对于任何枚举类型,values()是一个静态方法。关键的区别是静态方法不会被继承,因此将values()添加到java.lang.Enum中没有任何帮助。另一个隐含的方法是[EnumType].valueOf(String name)

为什么将这个方法的值定义为隐式,这对Enum类型是一个有用的方法,所以它应该是显式的?

同样,它不可能是明确的,因为静态方法不会被继承。对于valueOf,在java.lang.Enum中有一个模拟valueOf(class<T> type, name)方法。我不知道为什么在那里没有values(class<T> type);这对我来说是有道理的。但相反,有Class.getEnumConstants(),它做同样的事情。

+0

有一个'Class.getEnumConstants()'。 – immibis

+0

@immibis这是真的。我会编辑它。 –

相关问题