java - 将枚举映射到名称的符合声纳的方法
问题描述
我有以下方法将我项目中的各种枚举映射到他们的名字,但声纳抱怨Code smell·Provide the parametrized type for this generic.
public static String mapToName(Enum customEnum) {
return Optional.ofNullable(customEnum).map(Enum::name).orElse("");
}
在我的项目中为数十个枚举创建单独的方法是不可能mapToName
的,我如何使上述方法声纳兼容?
解决方案
首先,请不要Optional
用作 if-else 语句的替代品。它们不是为此目的而设计的。Optional 旨在传达代码中公共接口中空值的可能性,而不仅仅是文档,仅此而已。即使在私有方法中使用 optional 也违背了它的意图(你应该知道你自己的代码做了什么)。
请阅读 Optional 类背后的一位架构师的回答:Java 8 getter 是否应该返回可选类型?
作为练习,您应该查看 Optional 的源代码,并计算为每个名称映射操作创建的一次性对象的数量。
至于您的问题,这是解决即时声纳投诉的正确方法:
public static String mapToName(Enum<?> customEnum) {
return customEnum == null ? "" : customEnum.name();
}
问号是通配符,表示未知类型。
推荐阅读
- python - 无法在上传的图像和模板 django 之间建立联系
- c# - 将数组的json数组反序列化为C#中的字符串列表
- javascript - 如何在 Node.js 中运行函数
- python - 我正在尝试将我的分类值转换为整数,将布尔变量转换为整数以输入我的模型进行训练
- python - Numpy Hstack ValueError
- php - 如何在页面url php中的变量中获取完整值
- sed - 使用 sed 使用另一个文件的内容替换文件内的文本块
- python - AttributeError:“str”对象没有属性“content”
- python - 如何在已经运行的 python 会话中启用虚拟环境?
- reactjs - 如何将 Flask+React 应用程序部署到 Azure Web 服务