【发布时间】:2015-08-22 19:58:06
【问题描述】:
我正在重构一些用 Java 编写的遗留系统,但遇到了枚举构造函数的问题。
我有一个这样的枚举类(只是一个例子):
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)。
问题是我不知道如何将新参数传递给枚举按钮字段。 处理这种情况的正确方法是什么? 是否应该使用这个枚举?
Jean Logeart 问题后的澄清:InButton 和 OutButton 也有一个带有 String 参数的构造函数。
我宁愿避免将其初始化为 null,因为它可能会产生其他问题。
基本上这个问题是如何使用 java 语法模仿 a=f(x) 。大多数时候我可以做到:
- y = 新 x(); a = 新 f(y);
- a = 新 f(新 x());
- a = 新 f(null); a.getF().setX(new x());
在这种情况下我做不到。
【问题讨论】:
-
我想说这部分代码根本不需要重构。它是
Signal枚举中Singleton的实现。 -
@LuiggiMendoza,嗨 - 这更像是 Jean Logeart 在他的回答中描述的第一个选项,因此没有值的默认构造函数在 InButton 和 OutButton 中不再有效。
-
这不是对代码的重构,而是简单的维护。这就是显而易见的解决方案。
-
@LuiggiMendoza 我想重构 InButton 和 OutButton 类以表达它们的依赖关系并为它们创建测试用例。也许你对语义的看法是对的,无论如何它在枚举类中产生了一个问题;)
标签: java enums refactoring