• 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();
    }
  • 相关阅读:
    [linux] ubuntu gnome 控制面板恢复
    [linux] grub修改
    [erlang] 合并list
    hdu4169 Wealthy Family (树形背包)
    hdu 3899 JLUCPC
    最大流模板
    hdu 4167 User Names
    hdu 2196 Computer (树形DP)
    hdu 1011 Starship Troopers(树形DP)
    hdu 2874 Connections between cities (LCA转RMQ)
  • 原文地址:https://www.cnblogs.com/njl041x/p/9640309.html
Copyright © 2020-2023  润新知