首页 > 解决方案 > 填充可重用方法 Java 中使用的常量映射的最佳实践

问题描述

我正在使用一种可重用的方法来映射两个代码,当我们收到“a”时,我们想在代码中使用“01”。这是一个静态方法,所以它只创建一次并且我们重用该方法是否正确,或者这是一种不好的做法,每次调用此方法时都会进行不必要的处理?这个好习惯还是我应该在其他地方创建这个地图并只使用从它返回值的方法?

    private static String mapStatus(String duckStatus){

       
        Map<String, String> statusMap = new HashMap<String,String>();
        statusMap.put("a","01");
        statusMap.put("b","02");
        statusMap.put("c","03");

        if (!statusMap.containsKey(duckStatus)){
            throw new NullPointerException("Invalid Code does not map to status code");
        }
        return statusMap.get(duckStatus);
    }
    

标签: javahashmap

解决方案


根据评论,这enum可能是一个不错的选择,但正如@kendavidson 已经提到的那样,这是值得商榷的。enum从性能的角度来看,我认为和这里没有太大区别,HashMap但我认为HashMap会更合适,并且会提供更好的可读性。我在您编写的代码中建议的唯一区别是,使HashMap静态填充,以便HashMap每次您想statusMap在调用mapStatus方法时查找时避免构建时间。修改后的代码如下所示:

public class Test {
    private static final Map<String, String> STATUS_MAP = new HashMap<>();
    static {
        // Mapping the status values in Duck Creek to the Values used here
        STATUS_MAP.put("a", "01");
        STATUS_MAP.put("b", "02");
        STATUS_MAP.put("c", "03");
    }

    private static String mapStatus(String duckStatus) {
        if (!STATUS_MAP.containsKey(duckStatus)) {
            throw new IllegalArgumentException("Invalid code " + duckStatus + " does not map to status code");
        }
        return STATUS_MAP.get(duckStatus);
    }
}

笔记:

  1. 不确定您是否想签duckStatusduckCreekToEDMStatusMapperSTATUS_MAP,我正在使用STATUS_MAP
  2. 而不是NullPointerException更好地使用 IllegalArgumentException,因为它在这里是合适的。

推荐阅读