首先我们要知道switch中需要执行什么方法,以及用到的参数,返回值之类的

之后创建一个接口,下面是我定义的接口

public interface GeneralImportService {/***  方法* @param o  入参* @return 返回体*/UploadContext invoke(Object o);}

之后使用map将接口实现

public class GeneralImport {//UploadMethodNames为枚举,GeneralImportService为接口,既可以实现指定枚举运行指定接口private Map<UploadMethodNames, GeneralImportService> map = new HashMap<>(16);//这里获取一下baen,只是我当时要使用到这个baenprivate static final ProjectUploadApiService projectUploadApiService = SpringContextUtil.getBean(ProjectUploadApiService.class);private GeneralImport() {}//将已知的方法进行存入map,使用Lambda表达式实现接口 private static  GeneralImport IF_GENERAL_IMPORT = new GeneralImport().add(UploadMethodNames.COMPANY_IMPORT, ( n) -> {return projectUploadApiService.companyImport(companyImports);}).add(UploadMethodNames.LABOURER_IMPORT, ( n) -> {return projectUploadApiService.labourerImport(labourerImports);})/*** 提供⼀个公共的访问⽅式,需静态⽅法,以使类名直接调⽤,以达到外界能够访问*/public static GeneralImport getInstance() {return IF_GENERAL_IMPORT;}/*** 添加条件** @param key      需要验证的条件(key)* @param function 要执行的方法* @return this.*/public GeneralImport add(UploadMethodNames key, GeneralImportService function) {this.map.put(key, function);return this;}/*** 确定key是否存在,如果存在,则执行相应的方法。** @param key the key need to verify*/public UploadContext doIf(UploadMethodNames key, Object o) {if (this.map.containsKey(key)) {return map.get(key).invoke( o);}//这里也可以设置默认执行方法return UploadContext.failed("方法不存在");}}

获取baen

@Component
public class SpringContextUtil implements ApplicationContextAware {private static ApplicationContext applicationContext;@Overridepublic void setApplicationContext(ApplicationContext context) throws BeansException {applicationContext = context;}/*** 静态加载applicationContext*/public static ApplicationContext getApplicationContext() {return applicationContext;}/*** 通过反射获取Bean** @param requiredType* @param <T>* @return*/public static <T> T getBean(Class<T> requiredType) {return getApplicationContext().getBean(requiredType);}/*** 通过id名获取bean** @param name* @param <T>* @return*/public static <T> T getBean(String name) {return (T) getApplicationContext().getBean(name);}}

返回体

@Data
public class UploadContext implements Serializable {private String message;private String code;private Object data;private String token;
}

调用

  UploadContext uploadContext = GeneralImport.getInstance().doIf(uploadMethodNames, o);

java代替switch的办法?相关推荐

  1. Java 18 Switch语句更强大了

    自Java13以来,Switch表达式被添加到Java核心库中.如果您使用的是Java版本13或更高版本,那么您肯定可以将旧Switch转换为新Switch. 本文将讨论它如何在不破坏现有更改的情况下 ...

  2. Java中switch都可以支持哪些数据类型

    Java中switch都可以支持哪些数据类型 在JDK1.5之前,switch循环只支持byte short char int四种数据类型. JDK1.5 在switch循环中增加了枚举类与byte ...

  3. JAVA基础——Switch条件语句

    JAVA基础--switch 条件语句 switch语句结构: switch(表达式){case值1:语句体1:break:case值2:语句体2:break:case值3:语句体3:break:.. ...

  4. java用switch语句根据分数输出学生等级

    java用switch语句根据分数输出学生等级 /*** 从键盘上输入分数,计算等级grade=score/10;* <60,不及格,继续努力!* 60-69,及格,仍需努力!* 70-79,一 ...

  5. 品味性能之道十一:JAVA中switch和if性能比较

    通常而言大家普遍的认知里switch case的效率高于if else.根据我的理解而言switch的查找类似于二叉树,if则是线性查找.按照此逻辑推理对于对比条件数目大于3时switch更优,并且对 ...

  6. java中switch条件_关于java:你能在Android的switch-case中使用条件语句吗?

    在我的寻找中,我似乎找不到一个直截了当的肯定或否定.在android中,有没有一种在case switch中使用条件语句的方法?例如,年龄是一个int值: switch (age){ case (&g ...

  7. Android项目clean之后R.java文件丢失解决办法

    2019独角兽企业重金招聘Python工程师标准>>> Android项目clean之后R.java文件丢失解决办法 1.  Android Tools -> fix proj ...

  8. Java 中 switch 的用法

    Java 中 switch 的用法 1.switch 中的表达式的数据的数据类型为 byte, short, int, char, String(jdk > 1.7支持 String 类型) 2 ...

  9. 8、JAVA入门——switch选择结构

    目录 1.定义 2.语法 3.执行规律 4. switch与多重if异同点 1.定义 switch case 语句判断一个变量与一系列值中某个值是否相等,每个值称为一个分支. 2.语法 switch ...

最新文章

  1. ATS插件channel_stats源码分析解读
  2. 3D视觉工坊—助学助研计划正式启动!
  3. 公示 | 首届中国智能心电大赛初赛结果
  4. 将jsp页面转化为图片或pdf(一)(qq:2798641729)
  5. ARM指令集、Thumb指令集、Thumb-2指令集
  6. w3wp.exe内存占用过高(网站打不开,应用程序池回收就正常)
  7. iOS系统 越狱系统还原(平刷)
  8. 《Redis 设计与实现》读书笔记-Redis 对象
  9. LAMP 环境搭建实例
  10. 源于十年来的点滴积累——《变革中的思索》印行出版
  11. 解决使用MinGW编译C++代码报cannot find -lxxxx的问题
  12. C++ 添加程序图标到我的电脑
  13. Spring Boot开发Web应用
  14. Qt5:Qt中图片的翻转,旋转,缩放,扭曲操作
  15. 支付巨头Visa宣布计划在巴西将加密货币服务引入传统银行
  16. 数据库工作笔记010---Mysql中用SQL增加、删除字段,修改字段名、字段类型、注释,调整字段顺序总结
  17. 围棋人机大战属于计算机在什么方面的应用,《信息技术基础》第一章复习题库...
  18. 结构体、文件操作、指针
  19. 疯狂Python练习题
  20. (matlab)地震数据频谱分析-频谱图代码

热门文章

  1. 视频格式转换器哪个好 怎样把视频转换成手机支持的格式
  2. 做程序员的老婆,一定要注意的事情
  3. notify()和notifyAll()区别
  4. 部门赶工,团队成员都积累了上百个小时以上的调休时间,如何调休?
  5. FISCO BCOS 区块链
  6. RewriteCond 重写规则执行条件
  7. Flask扩展库 | Flask-WTF学习
  8. WIN7各个版本比较
  9. 迷你WIFI摄像机五个优势点不可忽略
  10. 华为云与鉴黄师不得不说的那些事