Java - 如何将字符串转换为实现接口(interface)的特定枚举

标签 java spring enums spring-data-mongodb

考虑下面的内部Enum实现一个接口(interface):

public interface NotificationTypes {

    public enum CONTACT_LIST implements NotificationTypes{
        ADDED("CONTACT_LIST-ADDED"),
        REMOVED("CONTACT_LIST-REMOVED");
        public enum INVITATION implements NotificationTypes{
            ACCEPTED("CONTACT_LIST-INVITATION-ACCEPTED"),
            REJECTED("CONTACT_LIST-INVITATION-REJECTED");

            String name = "";
            private INVITATION(String name){
                this.name = name;
            }

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

        String name = "";
        private CONTACT_LIST(String name){
            this.name = name;
        }

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

现在考虑数据库/mongodb 中的数据以 NotificationTypesString 形式存储在表/文档中。

{
    "_id" : ObjectId("59882ba49e5d82c72ba44fde"),
    "template" : "Contact list Invitation accepted by your friend",
    "type" : "CONTACT_LIST-INVITATION-ACCEPTED"
}

所以我的问题是:如何在运行时将该字符串转换回特定枚举而不确切知道要映射的枚举名称?

域类如下所示:

@Document(collection = CollectionNames.XXX_TEMPLATE)
public class XXXTemplate {

    private NotificationTypes type;
    //Other parameters, getters & setters + Constructor
}

最佳答案

我会构建一个Map<String, NotificationTypes>并用您拥有的所有实例填充它。然后您可以从该 map 查找。

我不认为编译器可以帮助你保持同步,除了你可以循环 EnumType.values() (但您必须记住对所有枚举类型执行此操作)。

关于Java - 如何将字符串转换为实现接口(interface)的特定枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45543939/

相关文章:

java - 获取图像宽度和高度时出现 NullPointerException

java - 尝试启动可执行 .jar 文件时出错

java - Spring 3.0 webapp NoClassDefFoundError - 类路径问题

java - 在枚举中不是常量

java - Hibernate @Enumerated 映射

java - 无法让待办事项 Activity 在 fragment 中工作

java - 如何将线程加入线程池中的主线程?

java - 使用 Spring Boot 读取自己的属性文件

java - Spring 的@Scheduled 注解是如何工作的?

ios - 使用枚举和自定义字符串可转换设置文本字段并返回