Ответ 1
Совершенно законно иметь enum
, объявленный внутри interface
. В вашей ситуации интерфейс просто используется как пространство имен для перечисления и ничего больше. Интерфейс используется обычно везде, где вы его используете.
У меня возник вопрос о том, чтобы перевести 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() должен вернуть тип перечисления, что заставит меня импортировать перечисление в интерфейсе.
Совершенно законно иметь enum
, объявленный внутри interface
. В вашей ситуации интерфейс просто используется как пространство имен для перечисления и ничего больше. Интерфейс используется обычно везде, где вы его используете.
Пример для вышеизложенных приведен ниже:
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
находится внутри интерфейса.
Да, это законно. В "реальной" ситуации Number будет реализовывать Thing, а Thing, вероятно, будет иметь один или несколько пустых методов.