Java代码消除switch/case,if/else语句的几种实现方式
转自:https://my.oschina.net/stefanzhlg/blog/372413
我们在平时的编码中,我们经常会遇到这样的情况:
使用过多的switch/case 或者 if else 语句,非常不爽,也违背了面向对象的原则:
public static Validator newInstance(String validatorType) {
if ("INT".equals(validatorType))
return new IntValidator();
else if ("DATE".equals(validatorType))
return new DateValidator();
else if ("LOOKUPVALUE".equals(validatorType))
return new LookupValueValidator();
else if ("STRINGPATTERN".equals(validatorType))
return new StringPatternValidator();
return null;
}
或相应的switch case代码。
下面我提供几种方式消除这些讨厌的switch/case,if/else语句:
1、反射
利用反射创建对象:
public static Validator newInstance(String validatorClass) {
return Class.forName(validatorClass).newInstance();
}
缺点:需要根据类的全名进行返回对象。
2、Map
提前将对象根据相应的key-object放入map
Map<String, Validator> validators = new HashMap<String,Validator>(){
{
put("INT",new IntValidator());
put("LOOKUPVALUE",new LookupValueValidator());
put("DATE",new DateValidator());
put("STRINGPATTERN",new StringPatternValidator());
}
};
public Validator newInstance(String validatorType) {
return validators.get(validatorType);
}
3、Enum
根据不同的枚举类型值调用newInstance创建出不同的对象。
enum ValidatorType {
INT {
public Validator create() {
return new IntValidator();
}
},
LOOKUPVALUE {
public Validator create() {
return new LookupValueValidator();
}
},
DATE {
public Validator create() {
return new DateValidator();
}
};
public Validator create() {
return null;
}
} public Validator newInstance(ValidatorType validatorType) {
return validatorType.create();
}
Java代码消除switch/case,if/else语句的几种实现方式的更多相关文章
- java代码中init method和destroy method的三种使用方式
在java的实际开发过程中,我们可能常常需要使用到init method和destroy method,比如初始化一个对象(bean)后立即初始化(加载)一些数据,在销毁一个对象之前进行垃圾回收等等. ...
- java中的Switch case语句
java中的Switch case 语句 在Switch语句中有4个关键字:switch,case break,default. 在switch(变量),变量只能是整型或者字符型,程序先读出这个变量的 ...
- Java学习-014-文本文件写入实例源代码(两种写入方式)
此文源码主要为应用 Java 读取文本文件内容实例的源代码.若有不足之处,敬请大神指正,不胜感激! 第一种:文本文件写入,若文件存在则删除原文件,并重新创建文件.源代码如下所示: /** * @fun ...
- [改善Java代码]小心switch带来的空值异常
使用枚举定义常量时,会伴有大量的switch语句判断,目的是伪类每个枚举项解释其行为,例如: public class Client { public static void main(String[ ...
- java中的switch case
switch-case语句格式如下 switch(变量){ case 变量值1: //; break; case 变量值2: //...; break; ... case default: //... ...
- Java WebService _CXF、Xfire、AXIS2、AXIS1_四种发布方式(使用整理)
目录 1. CXF方式2. Xfire方式3. AXIS2方式4. AXIS1方式5. AXIS1客户端调用6. AXIS2客户端调用7. CXF客户端调用8. Web Service Client客 ...
- Java中的Switch....case语句:
一.格式: switch(表达式){ case 常量表达式1: 语句1; case 常量表达式2: 语句2; … case 常量表达式n: 语句n; default: ...
- [改善Java代码]在switch的default代码块中增加AssertionError错误
switch的后跟枚举类型,case后列出所有的枚举项,这是一个使用枚举的主流写法,那留着default语句似乎没有任何作用了,程序已经列举出了所有的可能选项,肯定不会执行到default语句,. 错 ...
- 消除Switch...Case的过程
http://www.cnblogs.com/happyframework/p/3300170.html 目录 备注需求第一遍代码(重复的代码)第二遍代码(消除重复)备注 备注返回目录 不要重复自己, ...
随机推荐
- 华为云软件开发云VS开发痛点=?
在软件开发的过程中,是不是总会遇到这些问题: 搭建一个开发环境,用了九牛二虎之力,悲催的是竟然用不了…… 团队同事突然出差,他写的代码出现问题,我却不会改…… 提升软件件质量靠代码,交叉看.找大拿,简 ...
- Object-c学习笔记(1)
说明:本人用的win8 系统装Code::Blocks练习OC. 1.类的声明和实现的关系图: @interface就好像暴露在外面的时钟表面 @implementation就好像隐藏在时钟内部的 ...
- 用Delphi即时判断当前的网络的连接方式
判断网络的是否连接或者连接方式,比较重要的一点就是是不是即时判断,如果你明明无连接,判断出来却说你有,连接上了,却说你还未连接,下面要介绍的两个方法中 InternetGetConnectedStat ...
- Uniform synchronization between multiple kernels running on single computer systems
The present invention allocates resources in a multi-operating system computing system, thereby avoi ...
- cocos2d-x 源代码分析 总文件夹
这篇博客用来整理与cocos2d-x相关的工作,仅仅要有新的分析.扩展或者改动,都会更改此文章. 祝大家愉快~ 1.源代码分析 1.CCScrollView源代码分析 http://blog.csdn ...
- Frequentist 观点和 Bayesian 观点
1. Frequentist view Frequentist approach views the model parameters as unknown constants(未知的常数,而不是一个 ...
- 概率分布的 perplexity
1. 一种 measurement 信息论中,perplexity is a measurement of how well a probability distribution or probabi ...
- WPF字体图标——IconFont
原文:WPF字体图标--IconFont 版权声明:本文为[CSDN博主:松一160]原创文章,未经允许不得转载. https://blog.csdn.net/songyi160/article/de ...
- spring boot 集成mybatis连接oracle数据库
1. POM文件添加依赖 <!-- Mybatis --> <dependency> <groupId>org.mybatis.spring.boot</gr ...
- WPF实现选项卡效果(1)——使用AvalonDock
原文:WPF实现选项卡效果(1)--使用AvalonDock 简介 公司最近一个项目,软件采用WPF开发,需要实现类似于VS的选项卡(或者是浏览器的选项卡)效果.搜寻诸多资料后,发现很多同仁推荐Ava ...