我刚刚查看了TimeUnit 枚举源代码(简化如下):
public enum TimeUnit {
SECONDS {
public long toMillis(long d) { return d * 1000L; }
},
MINUTES {
public long toMillis(long d) { return d * 60000L; }
};
public long toMillis(long duration) {
throw new AbstractMethodError();
}
}
他们也可以使用抽象方法实现它:
public enum TimeUnit {
SECONDS {...}, MINUTES {...};
public abstract long toMillis(long duration);
}
既然他们选择了第一个实现,我想肯定是有原因的。因此,我的问题是:为什么?可以AbstractMethodError
扔吗?如果是,在哪种情况下?