java代替switch的办法?
首先我们要知道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的办法?相关推荐
- Java 18 Switch语句更强大了
自Java13以来,Switch表达式被添加到Java核心库中.如果您使用的是Java版本13或更高版本,那么您肯定可以将旧Switch转换为新Switch. 本文将讨论它如何在不破坏现有更改的情况下 ...
- Java中switch都可以支持哪些数据类型
Java中switch都可以支持哪些数据类型 在JDK1.5之前,switch循环只支持byte short char int四种数据类型. JDK1.5 在switch循环中增加了枚举类与byte ...
- JAVA基础——Switch条件语句
JAVA基础--switch 条件语句 switch语句结构: switch(表达式){case值1:语句体1:break:case值2:语句体2:break:case值3:语句体3:break:.. ...
- java用switch语句根据分数输出学生等级
java用switch语句根据分数输出学生等级 /*** 从键盘上输入分数,计算等级grade=score/10;* <60,不及格,继续努力!* 60-69,及格,仍需努力!* 70-79,一 ...
- 品味性能之道十一:JAVA中switch和if性能比较
通常而言大家普遍的认知里switch case的效率高于if else.根据我的理解而言switch的查找类似于二叉树,if则是线性查找.按照此逻辑推理对于对比条件数目大于3时switch更优,并且对 ...
- java中switch条件_关于java:你能在Android的switch-case中使用条件语句吗?
在我的寻找中,我似乎找不到一个直截了当的肯定或否定.在android中,有没有一种在case switch中使用条件语句的方法?例如,年龄是一个int值: switch (age){ case (&g ...
- Android项目clean之后R.java文件丢失解决办法
2019独角兽企业重金招聘Python工程师标准>>> Android项目clean之后R.java文件丢失解决办法 1. Android Tools -> fix proj ...
- Java 中 switch 的用法
Java 中 switch 的用法 1.switch 中的表达式的数据的数据类型为 byte, short, int, char, String(jdk > 1.7支持 String 类型) 2 ...
- 8、JAVA入门——switch选择结构
目录 1.定义 2.语法 3.执行规律 4. switch与多重if异同点 1.定义 switch case 语句判断一个变量与一系列值中某个值是否相等,每个值称为一个分支. 2.语法 switch ...
最新文章
- 图像 DFT 尺寸转换
- 随机森林RandomForest回归生物标记预测时间序列
- 2020 年开源许可证最新趋势:67% 为宽松许可证
- 电子科技大学计算机考研题,电子科技大学计算机科学与技术考研820历年真题
- Ajax中请求被缓存的问题
- 详解Numpy的广播机制
- mysql创建数据库1064_Mysql创建表过程中报1064错误
- 全球及中国霍乱菌苗行业模式分析及前景发展规划建议报告2022-2027年版
- JAVA——Scanner类绑定System.in后调用close()方法所引发的错误及其解决方案
- 通过CSS切换图片效果,点击这个图片可以实现连接功能,这里的图片在一张大图片中,每个并要切换的图片没有切换,通过disposition定位的方式做
- python代码_自学Python之后不想去公司上班,教你如何月入10000+,听过来人说
- 链表的基本操作 java_详细实现单链表的基本操作【Java版】
- Struts2的配置文件struts.xml的模板
- 多功能视频光端机_多业务光端机的功能特性
- c 语言 小波变换,小波变换C语言
- 历史文章之python
- docker 报错:x509: certificate has expired or is not yet valid
- 软件下载页面php,PHP网页制作软件下载
- 石墨笔记, Onenote 和 Effie 哪个适合单口或脱口秀作者?
- c语言教程——简单易懂