TimeUnit.class枚举操作如何工作?

时间:2014-11-27 09:50:25

标签: java enums

TimeUnit API中的枚举是如何工作的?特别是下面的语法是什么意思?

public enum Name {
    CONSTANT { }
}

我一直在关注枚举教程here,但它并没有真正详细介绍上述语法。常数里面的东西是什么?它是一个有自己方法的匿名类吗?那么常量之外的所有方法是什么?我很困惑。

2 个答案:

答案 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() {}

您正在创建一个匿名子类。对于枚举值也是如此。枚举值之外的方法是可用于所有枚举值的方法(如果有默认实现的公共接口,如果有的话)。如果要覆盖特定枚举值的方法,那就是这样做的方法。