java - 填充可重用方法 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 已经提到的那样,这是值得商榷的。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);
}
}
笔记:
- 不确定您是否想签
duckStatus
入duckCreekToEDMStatusMapper
或STATUS_MAP
,我正在使用STATUS_MAP
- 而不是
NullPointerException
更好地使用IllegalArgumentException
,因为它在这里是合适的。
推荐阅读
- node.js - redis事务:如何lpush列表的rpop结果?
- javascript - 如何删除匹配的 req.params.id 的对象
- git - 更改 bitbucket 拉取请求用户名
- java - 更改 jTableHeader 的字体和背景颜色
- javascript - 将图像拟合到复写表 (mailChimp)
- amazon-web-services - 如何从 Lambda API 网关的 Javascript 页面调用 Cognito 用户池进行身份验证
- swift - 如何快速保存类变量?
- javascript - 我正在使用 Bootstrap 构建网站,我需要搜索标签和分页的语言支持
- fusionauth - 可以将用户管理器限制为仅管理某些组的用户吗?
- python - 将 SQL 联接转换为 Python