Подтвердить что ты не робот

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();
   ...
}

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

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

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

4b9b3361

Ответ 1

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

Ответ 2

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

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();
  }

}

Ответ 3

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

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

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

Ответ 4

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