java - 什么是编译器隐式方法?

标签 java enums

对此问题的评论:A 'for' loop to iterate over an enum in Java状态:

@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

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

最佳答案

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

不,它是为 Java 5 添加的。

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

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

为什么将此方法 .values 定义为隐式,这是 Enum 类型上的一个有用方法,因此它应该是显式的?

同样,它不可能是显式的,因为静态方法不是继承的。对于 valueOf有一个模拟valueOf(class<T> type, name) java.lang.Enum中的方法。我不知道为什么没有 values(class<T> type)在那里;这对我来说是有意义的。但取而代之的是Class.getEnumConstants() ,它做同样的事情。

关于java - 什么是编译器隐式方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19979011/

相关文章:

java - 锁屏而不关闭

c - 为什么我不能使用函数返回值作为参数?

objective-c - Swift - 带有button.tag的枚举?

c# - 将嵌套结构从 C# 编码到 C++ DLL

java - 使用 @RolesAllowed 通过 RESTEasy 和 Jackson 过滤实体属性

java - 将触摸事件与鼠标事件分开

java - 在 Java Swing 应用程序中启动 URL

java - 将视频和音乐合并形成视频文件

c++ - C++ 中枚举的获取和设置

spring-boot - 有没有办法为 JPA 存储库 : findByEnumContaining(String enum) [enum is subString for possible ENUM values] 添加抽象方法