IntelliJ реализует метод для всех значений перечисления - PullRequest
0 голосов
/ 27 июня 2018

Учитывая, что у меня есть «пустой» интерфейс:

public interface Color {
}

И класс enum, который реализует указанный интерфейс:

public enum Fruits implements Color  {

    APPLE,
    APRICOT,
    AVOCADO,
    BANANA,
    BLACKBERRY,
    BLUEBERRY,
    CHERRY,
    COCONUT,
    CRANBERRY,
    DATE,
    DURIAN,
    ELDERBERRY,
    FIG,
    JACKFRUIT,
    KIWI,
    LEMON,
    LIME,
    LYCHEE,
    MANGO,
    MELLON,
    ORANGE,
    PAPAYA,
    PASSION_FRUIT,
    PEAR,
    PLUM,
    PINEAPPLE,
    POMELO    
}

После некоторого времени кодирования я возвращаюсь к этому интерфейсу и добавляю метод, такой как:

public interface Color {
    Color getColor();
}

IntelliJ Idea обязательно скажет мне, что каждое значение перечисления должно реализовывать новый добавленный метод. Теперь я могу перейти к каждому значению перечисления (используя F2 в качестве ярлыка для перехода к каждому значению), а затем перейти к ALT + ENTER, чтобы создать его реализацию по умолчанию.

APPLE {
    @Override
    public Color getColor() {
        return null;
    }

},
APRICOT {
    @Override
    public Color getColor() {
        return null;
    }
},
AVOCADO {
    @Override
    public Color getColor() {
        return null;
    }
},
...

Это быстро выходит из-под контроля, как только я понимаю, что существует не только это перечисление, которое реализует этот интерфейс.


Разъяснение

Я ищу сочетание клавиш в IntelliJ Idea , интегрированную среду разработки, которая предоставляет функции для генерации кода для создания пустого метод пень каждого значения перечисления сразу.

IntelliJ Idea обеспечивает такую ​​функциональность для каждого отдельного значения перечисления в отдельности, что приводит меня к вопросу: можно ли это сделать для всех значений одновременно?

Ответы [ 3 ]

0 голосов
/ 27 июня 2018

Вы можете предоставить реализацию по умолчанию в самом классе перечисления, а не в каждом из значений перечисления:

public enum DirectCallRate implements KeyPerformanceIndicator  {

    COUNT,
    COUNT_ANSWERED,
    COUNT_UNANSWERED,
    COUNT_EXTERNAL,
    COUNT_ANSWERED_EXTERNAL,
    COUNT_UNANSWERED_EXTERNAL,
    COUNT_INTERNAL,
    COUNT_ANSWERED_INTERNAL,
    COUNT_UNANSWERED_INTERNAL,
    COUNT_INBOUND,
    COUNT_ANSWERED_INBOUND,
    COUNT_UNANSWERED_INBOUND,
    COUNT_OUTBOUND,
    COUNT_ANSWERED_OUTBOUND,
    COUNT_UNANSWERED_OUTBOUND,
    COUNT_EXTERNAL_OUTBOUND,
    COUNT_ANSWERED_EXTERNAL_OUTBOUND,
    COUNT_UNANSWERED_EXTERNAL_OUTBOUND,
    COUNT_EXTERNAL_INBOUND,
    COUNT_ANSWERED_EXTERNAL_INBOUND,
    COUNT_UNANSWERED_EXTERNAL_INBOUND,
    COUNT_INTERNAL_OUTBOUND,
    COUNT_ANSWERED_INTERNAL_OUTBOUND,
    COUNT_UNANSWERED_INTERNAL_OUTBOUND,
    COUNT_INTERNAL_INBOUND,
    COUNT_ANSWERED_INTERNAL_INBOUND,
    COUNT_UNANSWERED_INTERNAL_INBOUND;

    @Override
    public String getSomething(Any any) {
        return null;
    }
}

Я думаю, что в этом случае это лучший подход, чем создание метода по умолчанию в интерфейсе, поскольку реализация по умолчанию, по-видимому, в первую очередь связана с перечислением, а не со всеми другими разработчиками интерфейса.

0 голосов
/ 27 июня 2018

Нет ярлыка для этого.

0 голосов
/ 27 июня 2018

Конечно ... просто создайте метод по умолчанию на интерфейсе:

default String getSomething(Any any) {
    return null;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...