TimeUnit API中的枚举是如何工作的?特别是下面的语法是什么意思?
public enum Name {
CONSTANT { }
}
我一直在关注枚举教程here,但它并没有真正详细介绍上述语法。常数里面的东西是什么?它是一个有自己方法的匿名类吗?那么常量之外的所有方法是什么?我很困惑。
答案 0 :(得分:0)
在{}
中实现了“抽象”方法。
将它视为扩展的类的主体 - 按照您的示例 - “名称”。
所以如果你在Name
中有一个方法 - 让我们说
public String someMethod(){ throw new AbstractMethodError(); /*Or default implementation.*/ }
然后你必须在
中实现它CONSTANT{
public String someMethod() { return "green eggs and ham"; }
}
这就是在TimeUnit
中所做的 - 它定义了用于转换不同单元的抽象方法,并且元素实现了它们的大小的转换方法。
答案 1 :(得分:0)
枚举也是类,它们的常量可以被视为类的实例。如果你看一个普通的课,如果你做了类似的事情:
Clz obj = new Clz() {}
您正在创建一个匿名子类。对于枚举值也是如此。枚举值之外的方法是可用于所有枚举值的方法(如果有默认实现的公共接口,如果有的话)。如果要覆盖特定枚举值的方法,那就是这样做的方法。