enum реализация внутри интерфейса – Java

У меня возник вопрос о том, чтобы перевести enum в интерфейс. Чтобы сделать его более ясным, см. Следующий код:

public interface Thing{ public enum Number{ one(1), two(2), three(3); private int value; private Number(int value) { this.value = value; } public int getValue(){ return value; } } public Number getNumber(); public void method2(); ... } 

Я знаю, что интерфейс состоит из методов с пустыми телами . Однако для enums, которое я использовал здесь, нужен конструктор и метод для получения связанного значения. В этом примере предлагаемый интерфейс будет состоять не только из методов с пустым телом. Разрешена ли эта реализация?

Я не уверен, должен ли я поместить class enum внутри интерфейса или classа, который реализует этот интерфейс.

Если я поместил enum в class, реализующий этот интерфейс, то метод public Number getNumber () должен вернуть тип enums, что заставит меня импортировать перечисление в интерфейсе.

    Совершенно законно иметь enum объявленный внутри interface . В вашей ситуации интерфейс просто используется как пространство имен для enums и ничего больше. Интерфейс используется обычно везде, где вы его используете.

    Пример для вышеизложенных приведен ниже:

     public interface Currency { enum CurrencyType { RUPEE, DOLLAR, POUND } public void setCurrencyType(Currency.CurrencyType currencyVal); } public class Test { Currency.CurrencyType currencyTypeVal = null; private void doStuff() { setCurrencyType(Currency.CurrencyType.RUPEE); System.out.println("displaying: " + getCurrencyType().toString()); } public Currency.CurrencyType getCurrencyType() { return currencyTypeVal; } public void setCurrencyType(Currency.CurrencyType currencyTypeValue) { currencyTypeVal = currencyTypeValue; } public static void main(String[] args) { Test test = new Test(); test.doStuff(); } } 

    Короче говоря, да, это нормально.

    Интерфейс не содержит никаких тел метода; вместо этого он содержит то, что вы называете «пустые тела» и более известный как сигнатуры методов .

    Не имеет значения, что enum находится внутри интерфейса.

    Да, это законно. В «реальной» ситуации число будет реализовывать Thing, а Thing, вероятно, будет иметь один или несколько пустых методов.