填充可重用方法中使用的常量映射的最佳实践 Java

Best practice for populating constant map used in reusable method 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);
    }
    

根据评论,enum 可能是一个不错的选择,但正如@kendavidson 已经提到的那样,这是值得商榷的。从性能的角度看,enumHashMap 之间没有太大区别,但我认为 HashMap 更合适,并提供更好的可读性。我在您编写的代码中建议的唯一区别是,使 HashMap 静态填充,以便每次调用时都想查找 statusMap 时避免 HashMap 构建时间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. 不确定您是否要检查 duckStatus duckCreekToEDMStatusMapperSTATUS_MAP,我用的是STATUS_MAP
  2. NullPointerException 更好用 IllegalArgumentException 因为这里很合适。