关于java:什么是编译器隐式方法?

What is a compiler implicit method?

对这个问题的一个注释:在Java状态下迭代一个EnUM的"Of"循环:

@jacktrades: It is an implicit method that exists only in the
compiler. Therefore the base class can not declare a method with the
same name and thus it does not get included in the automatically
generated Javadocs.
docs.oracle.com/javase/specs/jls/se7/html/jls-8.html#jls-8.9.2 –
Torben Mar 5 at 9:32

由于此方法只存在于编译器中,这是否意味着它在JDK1.5中的枚举对象变为可用之前就存在?此方法是否仅适用于编译器的其他对象。java.util.map包含一个values()方法,但这是有文档记录的,所以是显式的吗?为什么要将此方法定义为隐式。值是隐式的,这对于枚举类型是有用的方法,因此它应该是显式的,并且在枚举对象类型上可用?


由于此方法只存在于编译器中,这是否意味着它在JDK1.5中的枚举对象变为可用之前就存在?

不,它是为Java 5添加的。

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

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

为什么要将此方法定义为隐式。值是隐式的,对于枚举类型来说这是一个有用的方法,因此它应该是显式的?

同样,它不可能是显式的,因为静态方法不是继承的。对于valueOf,在java.lang.Enum中有一个类似的valueOf(class type, name)方法。我不知道为什么里面没有values(class type),这对我来说是有道理的。但相反,有一个Class.getEnumConstants(),它也做同样的事情。