将字符串与一组值进行比较并返回值的最佳方法

时间:2014-06-18 10:19:31

标签: java

我写了一个方法。我想根据类返回员工类型。

我在想这里是否有更好的标准实施。

public static EmployeeType decideEmployeeType(String className)
    {
        if(className.equalsIgnoreCase("A") || className.equalsIgnoreCase("1"))
        {
            return EmployeeType.ADMIN;
        }            
        else if(className.equalsIgnoreCase("S") || className.equalsIgnoreCase("2"))
        {
            return EmployeeType.SERVICE;   
        }
        else
        {
            //throw exception
        }
    }

有人建议,更好的做法。

3 个答案:

答案 0 :(得分:5)

我可以提供一个代码示例,通过更改常量可以轻松扩展而不会妨碍业务逻辑:

private static HashMap<String, EmployeeType> employeeTypeTranslations = new HashMap<String,EmployeeType> () {{
  put("a",EmployeeType.ADMIN);
  put("s",EmployeeType.SERVICE);
  put("1",EmployeeType.ADMIN);
  put("2",EmployeeType.SERVICE);

}};

public static EmployeeType decideEmployeeType(String class) {
        employeeTypeTranslations.get(class.toLowerCase());
    }

这允许您将来可以将此地图外部化为属性文件或XML或其他内容。

答案 1 :(得分:1)

如果您使用的是JDK 7,则可以使用带字符串的开关。

switch(className){
        case "A": /* do your stuff */
         break;
        default:
         //do default stuff
}

我不确定你为什么要上课1或A(我想这是因为ProGuard或其他任何混淆器?

如果是,请使用常量。类a = YourClass.getClass();

混淆器会自动更改它。

答案 2 :(得分:1)

没有更好的方法,但你可以使用&#39; valueOf&#39;如果你使用enum。

EmployeeType.valueOf("ADMIN") // return EmployeeType.ADMIN

注意:区分大小写