首页 > 解决方案 > 从枚举生成 Java 类

问题描述

我面临下一个问题:

我在 BE 端有属性,可以通过处理程序获取和设置。我使用 enum 来设置属性,并使用 bean class 来获取。现在我需要重复属性名称,我想避免它。

public enum ExampleEnum {

    APPLE("_apple"),
    PEAR("_pear"),
    PINEAPPLE("_pineapple");

    private final String name;

    ExampleEnum(String name) {
        this.name = name;
    }

    @Override
    public String getName() {
        return name;
    }
}

@Data
@With
@AllArgsConstructor
public class EnumBean {

    @SerializedName("_apple")
    String apple;
    @SerializedName("_pear")
    String pear;
    @SerializedName("_pineapple")
    String pineapple;

}

public interface PropertiesService {

    EnumBean getPropertiesViaBE();
    void setPropertyViaBE(ExampleEnum property, String value);

}

现在我必须支持这些类之间的两种方式的一致性。

标签: java

解决方案


我不确定这是你想要达到的,但我猜:

您想要返回一个 json 对象,该对象基本上包含name属性到枚举名称的映射,例如:

{
   "_apple": "APPLE",
   "_pear": "PEAR",
   "_pineapple":"PINEAPPLE"
}

在旁注中,我不确定您为什么需要它作为一个简单的列表可能足以获得可用的枚举,但也许我猜错了,您需要添加更多信息。无论如何,您都可以在以下基础上进行构建。

要生成像上面这样的 json 字符串,您不需要 POJO。大多数 json 生成器和解析器都支持泛型类型,例如映射和集合。因此,您可以构建一个地图:

Map<String, String> map = Arrays.stream(ExampleEnum.values())
                                .collect(Collectors.toMap(e -> e.getName(), 
                                                          e -> e.name()));

然后只需将该映射序列化为 json,您应该会得到一个类似上面的字符串。


推荐阅读