什么是编译器隐式方法?

时间:2013-11-14 13:32:03

标签: java enums

对此问题的评论: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对象类型上使用?

1 个答案:

答案 0 :(得分:2)

由于此方法仅存在于编译器中,这是否意味着它在jumk1.5中可用的Enum对象之前存在?

不,它是为Java 5添加的。

此方法是否仅适用于仅编译器的其他对象。 java.util.Map包含一个values()方法,但是这是记录的,所以是显式的吗?

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

为什么要将此方法.values定义为隐式,这对于枚举类型是一个有用的方法,所以它应该是显式的?

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