Почему java.util.concurrent.TimeUnit.convert выбрасывает AbstractMethodError вместо того, чтобы быть абстрактным

java.util.concurrent.TimeUnit имеет этот источник:

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

Почему это не метод abstract как

abstract int excessNanos(long d, long m);
7 голосов | спросил keon gao 21 AMpThu, 21 Apr 2016 10:19:53 +030019Thursday 2016, 10:19:53

1 ответ


0

Однострочные комментарии над объявлением метода гласят следующее:

// 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 это идентификатор ошибки, который говорит,

  

JDK-6287639: Абстрактные методы в перечислимых классах не должны указываться как абстрактные

Теперь рассмотрим следующее enum, рассматривая его как класс и каждую константу перечисления как Object, ясно, что если мы создадим Object чего-то абстрактного, мы должны обеспечить реализацию и избегайте этого convert не является abstract,

enum Blocks {
    A1, B1, C1;
    // It will say enum constant must implement 
    // the abstract method test
    abstract int test();
}
ответил CoderCroc 21 AMpThu, 21 Apr 2016 10:27:50 +030027Thursday 2016, 10:27:50

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132