我有以下一段代码。它是一种工厂函数,可以根据类型检索编写器的实例。请注意,该类型是一个 enum
。
public Writer getWriter(WriterTypeEnum type){
switch(type){
case A: new AWriter() break;
case B: ... break;
case C: ... break;
...
}
}
问题是我有大约 30 个 case
。我能做些什么来减少它们或根本不实现它们?
我过去使用策略模式解决过类似的情况,但现在我面临着整个应用程序中使用的旧 enum
。另一个问题是我无法将 spring bean 注入(inject)到这个枚举中。 switch case 中的一些实例是 bean
。
WriterTypeEnum
有一个来自 UI 的 ID,我必须根据该 ID 确定正确的实例。
最佳答案
你可以设置你的枚举有一个抽象方法
public abstract Writer getWriter();
然后,您的所有实例都必须实现该方法,例如
public enum YourEnum{
FIRST(){
public Writer getWriter(){
return null;
}
}, ... // other enums
public abstract Writer getWriter();
}
或者如果有重复的语句,你可以省略 switch 中的 break
关于java - 减少开关的案例数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38634073/