考慮下面內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