Я перерабатываю некоторую унаследованную систему, написанную на Java, и я столкнулся с проблемой с конструктором enum.Java, enum with constructor
У меня есть класс перечислимую как это (просто пример):
public enum Signal{
ON(new InButton()),
OFF(new OutButton())
private final Button button;
Signal(Button button) {
this.button = button;
}
}
InButton и OutButton расширяет интерфейс Button.
Доступ к значениям перечисления осуществляется в первый раз с использованием метода Signal.Values (). (Кроме того, в одном из методов Button у меня есть код, который использует перечисление, например, activateButton (Signal.ON))
При реорганизации кода я хотел создать новый конструктор для Button, который выражает его (например, Button (String input)).
Проблема в том, что я не знаю, как передать новые параметры в поле кнопки перечисления. Каков правильный способ справиться с этой ситуацией? Это перечисление должно использоваться вообще?
Разъяснения после Жаной Logeart вопроса: InButton
и OutButton
также есть конструктор с аргументами через String
. Я бы предпочел избежать его инициализации до нуля, потому что это могло бы создать другие проблемы.
В основном этот вопрос заключается в том, как имитировать a = f (x) с использованием синтаксиса java. Большую часть времени я могу сделать:
- y = new x(); a = new f (y);
- a = новый f (новый x());
- a = новый f (null); a.getF(). setX (новый x());
В этом случае я не могу этого сделать.
Я бы сказал, что эта часть кода вообще не нуждается в рефакторе. Это реализация «Singleton» внутри переименования «Signal». –
@LuiggiMendoza, Привет. Это больше похоже на первый вариант, описанный Жаном Логейтом в его ответе, поэтому конструктор по умолчанию без значений больше недействителен в InButton и OutButton. – Neo
Это не рефакторинг в вашем коде, это простое обслуживание. И это очевидное решение здесь. –