考虑下面内Enum
实现一个接口:爪哇 - 如何将字符串转换成特定的枚举实现一个接口
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是存储在String
的形式NotificationTypes
在表/文件。
{
"_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
}
好的谢谢你的回复。但如果我嵌套枚举高达3-4级,那么我必须遍历所有枚举,不是??是否有任何简短的方式来循环实现给定接口(NotificationTypes)的所有枚举? – Afridi
不,您必须构建该映射(静态地,拼写出源代码中的所有类型)。但是从那张地图上查找是微不足道的。 – Thilo
如果你真的想要让代码找到你的接口的所有实现:https://stackoverflow.com/questions/347248/how-can-i-get-a-list-of-all-the-implementations-of -an-interface-programmatically但是不要。住在地图上或重新考虑你的设计。 – Thilo