我想使用枚舉實現基本狀態機;枚舉實現一個接口來管理允許的狀態轉換。但是我想在屬性文件中配置一個實現接口的枚舉類名列表,並且應該在特定的上下文中使用。上下文在運行時確定,並且該上下文鍵映射到屬性文件中的屬性鍵。一旦我從屬性文件中獲取上下文的枚舉類名稱,如何使用該類名稱來獲取實例引用以通過接口方法使用該枚舉?我可以看到您可以使用反射來發現特定枚舉的屬性,但就是這樣。有任何想法嗎?獲取對從枚舉類名實現接口的Java Enum的引用
1
A
回答
1
你說得對使用反射:
使用
Class.forName
得到適當的Class
對象,一旦你從你的屬性文件讀取的類名。確保您傳入完全合格的課程名稱。你需要在這裏找到各種檢查過的異常。確保它是一個實現你的接口,與
isEnum
方法,並使用從接口的Class
對象isAssignableFrom
方法的枚舉。isEnum()& & YourInterface.class.isAssignableFrom(clazz所)
使用靜態
Enum.valueOf
方法從String
得到實際的枚舉常量,並將其投放到您的接口。(YourInterface) Enum.valueOf(clazz, stringName)
1
我寫了這...它可以幫助你:
public class MyTests {
static enum XX implements Runnable {
A, B;
public void run() {
System.out.println("I'm enum value: " + this.name());
}
}
public static void main(String[] args) throws Exception {
new MyTests();
}
public MyTests() throws Exception {
Class<?> loaded = Class.forName("MyTests$XX");
Class<? extends Runnable> xx = loaded.asSubclass(Runnable.class);
Runnable[] enumConstants = xx.getEnumConstants();
for (Runnable runnable : enumConstants) {
runnable.run();
}
}
}
這將打印:
I'm enum value: A
I'm enum value: B
0
相關問題
- 1. 在c#接口實現枚舉和接口的方法簽名
- 2. 如何從接口獲得一個枚舉到實現該接口的類?
- 3. 使用枚舉的EnumSet實現接口
- 4. 如何實現Java枚舉抽象類和接口?
- 5. 獲取給定Enum值的枚舉名稱的Java
- 6. Java Enum引用另一個枚舉
- 7. C#從類的名稱獲取枚舉
- 8. 實現相同接口的枚舉Java開關
- 9. Java類枚舉枚舉類
- 10. Java中的枚舉不允許在其實現接口中實現方法
- 11. Java泛型枚舉子類型接口
- 12. Java:如何定義一個實現接口的枚舉集合
- 13. 從java的父接口獲取枚舉大小
- 14. 實現接口的枚舉類型映射集合
- 15. Java枚舉類型實例
- 16. 枚舉的接口
- 17. 其價值獲取枚舉類名
- 18. 通過名稱獲取java枚舉
- 19. 從泛型類型獲取枚舉類?
- 20. 從類型參數枚舉Enum類
- 21. 獲取枚舉從一類具有多個枚舉
- 22. 從類<?獲取枚舉實例擴展枚舉>使用字符串值?
- 23. 從枚舉值中獲取枚舉名稱
- 24. enum中的枚舉
- 25. 約束的枚舉類型實現一些接口的泛型類型
- 26. 在接口/基類中的C#枚舉?
- 27. 我該如何跟蹤(枚舉)實現接口的所有類
- 28. 枚舉實現給定接口的所有Delphi類?
- 29. 從字符串獲取枚舉類型
- 30. Java - 類,接口或枚舉預期
如果你只有類的名字,則需要使用反射...查看該SO關於使用反射與枚舉http://stackoverflow.com/questions/140537/how-to-use -java-reflection-when-the-enum-type-a-class – fmodos
使用枚舉類名稱會破壞使用枚舉的目的。枚舉權力來自於引用代碼中的實例名稱。如果你想要使用類名,請顯示一個僞代碼行,即使它不能編譯,所以我們知道你的意圖是什麼。 – Bohemian
我正在使用枚舉作爲一個迷你狀態機。 Enum實現了一個接口,該接口有一個方法getNextAllowedStates,它返回一組相同類型的Enum常量。但是我的應用程序具有服務的概念,並且取決於哪個服務請求來自我想要的狀態機實現,因爲每個服務的狀態轉換是不同的。我想只做一些事情 - 請求是服務x獲取枚舉類型y或服務獲取枚舉類型t時。這將從客戶端調用的工廠完成,然後使用接口類型來獲得下一個可能的狀態 – PaulG