java - 为什么 java.util.concurrent.TimeUnit.convert 抛出 AbstractMethodError 而不是抽象

标签 java enums abstract

java.util.concurrent.TimeUnit 有这个来源:

public long convert(long sourceDuration, TimeUnit sourceUnit) {
    throw new AbstractMethodError();
}

为什么这不是一个抽象方法

abstract int excessNanos(long d, long m);

最佳答案

方法声明上方的单行注释如下,

// To maintain full signature compatibility with 1.5, and to improve the
// clarity of the generated javadoc (see 6287639: Abstract methods in
// enum classes should not be listed as abstract), method convert
// etc. are not declared abstract but otherwise act as abstract methods. 

在这里,6287639是 bug id,它说,

JDK-6287639 : Abstract methods in enum classes should not be listed as abstract

现在考虑下面的 enum,将其视为类,并将每个枚举常量视为 Object,很明显,如果我们创建 Object一些抽象的东西我们必须提供实现并避免这种convert不是abstract

enum Blocks {
    A1, B1, C1;
    // It will say enum constant must implement 
    // the abstract method test
    abstract int test();
}

关于java - 为什么 java.util.concurrent.TimeUnit.convert 抛出 AbstractMethodError 而不是抽象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36762450/

相关文章:

java - 无法清除 hibernate 缓存

java - 将 YML/Java 配置 Autowiring 到 Spring Boot Bean

c# - 添加枚举值会破坏二进制兼容性吗?

java - 如何使用 Hibernate 将枚举映射到单独的表?

Java:获取键集值

java - 在定义值之前无法在 Enum 中定义 int 变量

f# - 如何使用被覆盖的抽象成员的基本实现?

c++ - 对抽象类的引用

class - 编写 TypeScript 装饰器以始终将类方法绑定(bind)到 'this'

java - 为什么没有调用 main 方法?每次执行时在java中递归的次数?