首页 > 解决方案 > 将枚举映射到名称的符合声纳的方法

问题描述

我有以下方法将我项目中的各种枚举映射到他们的名字,但声纳抱怨Code smell·Provide the parametrized type for this generic.

public static String mapToName(Enum customEnum) {
        return Optional.ofNullable(customEnum).map(Enum::name).orElse("");
    }

在我的项目中为数十个枚举创建单独的方法是不可能mapToName的,我如何使上述方法声纳兼容?

标签: javasonarqubeoptional

解决方案


首先,请不要Optional用作 if-else 语句的替代品。它们不是为此目的而设计的。Optional 旨在传达代码中公共接口中空值的可能性,而不仅仅是文档,仅此而已。即使在私有方法中使用 optional 也违背了它的意图(你应该知道你自己的代码做了什么)。

请阅读 Optional 类背后的一位架构师的回答:Java 8 getter 是否应该返回可选类型?

作为练习,您应该查看 Optional 的源代码,并计算为每个名称映射操作创建的一次性对象的数量。

至于您的问题,这是解决即时声纳投诉的正确方法:

public static String mapToName(Enum<?> customEnum) {
    return customEnum == null ? "" : customEnum.name();
}

问号是通配符,表示未知类型。


推荐阅读