java - 减少开关的案例数

标签 java spring

我有以下一段代码。它是一种工厂函数,可以根据类型检索编写器的实例。请注意,该类型是一个 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/

相关文章:

java - 使用mockito测试服务

java - Spring Mail 内联图像未附加

javascript - 使用 Axios 从 Vue 前端上传/下载 pdf 文件到 Spring 后端

java - 服务器启动时出现 spring Autowiring 错误

java - Eclipse 在调试时显示 Java 字节数组的红色值

java.reflection ProceedingJoinPoint

java - 如何使用 Java Servlets 和 Jsp 将数据库查询显示到表中?

java - Android AES/ECB/PKCS7PADDING 生成 key bouncy caSTLe

java - RepositoryItemReader 找不到带参数的方法

java - Spring ORM 4.0.5 和 Hibernate 4.3.5 - 无法保存到数据库