Сегодня я использовал функцию рефакторинга «pull interface» в Eclipse, чтобы создать интерфейс на основе существующего класса. В диалоговом окне предлагается создать все новые методы нового интерфейса как «абстрактные» методы.
Какая польза от этого?
Я думал, что тот факт, что вам было разрешено объявлять методы интерфейса как абстрактные, был излишней и безвредной особенностью языка, что не особенно поощряется.
Почему Eclipse поддерживает такой стиль или почему кто-то добровольно решит это сделать?
Пояснение: я не спрашиваю, почему интерфейсные методы являются абстрактными, это очевидно. Я спрашиваю, почему кто-то явно решил пометить их как абстрактные, так как если они находятся в интерфейсе, они в любом случае являются абстрактными.
abstract
ключевое слово в объявлении самого интерфейса, а не его членов. @ Ниже приведен правильный ответ, который также содержит действительные источники ссылок.«Преимущество этого» (добавление тезисов при объявлении методов интерфейса) в eclipse было бы старой проблемой совместимости с компилятором jdt eclipse в jdk1.3
Поскольку компилятор Eclipse, вероятно, находится на уровне соответствия 1.4 (см.
Workbench>Preferences>Java>Compiler>JDK Compliance
) Или использует как минимум 1,3 библиотеки классов, если используется режим соответствия 1.3, присутствие «абстрактного» не требуется в большинстве текущих проектов Eclipse.источник
Из Java SE 7 JLS (спецификация языка Java): «Разрешается, но не рекомендуется как вопрос стиля, избыточно указывать открытый и / или абстрактный модификатор для метода, объявленного в интерфейсе».
Для Java SE 5.0 : «Для совместимости со старыми версиями платформы Java разрешается, но не рекомендуется, из соображений стиля, избыточно указывать абстрактный модификатор для методов, объявленных в интерфейсах».
источник
Согласно JLS методы в интерфейсах являются абстрактными по умолчанию, поэтому ключевое слово является избыточным. Зная это, я бы никогда не использовал это, чтобы «избежать беспорядка презентации».
источник