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();
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM