首先我们要知道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. 图像 DFT 尺寸转换
  2. 随机森林RandomForest回归生物标记预测时间序列
  3. 2020 年开源许可证最新趋势:67% 为宽松许可证
  4. 电子科技大学计算机考研题,电子科技大学计算机科学与技术考研820历年真题
  5. Ajax中请求被缓存的问题
  6. 详解Numpy的广播机制
  7. mysql创建数据库1064_Mysql创建表过程中报1064错误
  8. 全球及中国霍乱菌苗行业模式分析及前景发展规划建议报告2022-2027年版
  9. JAVA——Scanner类绑定System.in后调用close()方法所引发的错误及其解决方案
  10. 通过CSS切换图片效果,点击这个图片可以实现连接功能,这里的图片在一张大图片中,每个并要切换的图片没有切换,通过disposition定位的方式做
  11. python代码_自学Python之后不想去公司上班,教你如何月入10000+,听过来人说
  12. 链表的基本操作 java_详细实现单链表的基本操作【Java版】
  13. Struts2的配置文件struts.xml的模板
  14. 多功能视频光端机_多业务光端机的功能特性
  15. c 语言 小波变换,小波变换C语言
  16. 历史文章之python
  17. docker 报错:x509: certificate has expired or is not yet valid
  18. 软件下载页面php,PHP网页制作软件下载
  19. 石墨笔记, Onenote 和 Effie 哪个适合单口或脱口秀作者?
  20. c语言教程——简单易懂

热门文章

  1. es应用笔记2-sql查询
  2. 爬虫框架 Scrapy 教程详解
  3. 1000以内所有同构数java算法_C语言编程求出1~1000的同构数
  4. 蛰伏——背后的黑暗 2012-02-05 13:23:36 蛰伏——背后的黑暗 每
  5. 图文并茂带你弄懂物理分辨率、分辨率、物理像素、逻辑像素、dpr、ppi
  6. 什么是面向对象编程(OOP)
  7. Python在字符串中查找子字符串
  8. 【每日亿题】2021icpc江西省赛
  9. 电子专业常用电子网站
  10. 复合索引(引用于姜敏)