[英]How can I get an enum from an interface to a class that implements that interface?
[英]Get reference to Java Enum that implements an interface from enum class name
我想使用枚舉實現基本的狀態機; 枚舉實現一個接口來管理允許的狀態轉換。 但是我想在屬性文件中配置實現該接口的枚舉的類名列表,並應在特定上下文中使用。 上下文是在運行時確定的,並且該上下文鍵映射到屬性文件中的屬性鍵。 從屬性文件獲取上下文的枚舉的類名稱后,如何使用該類名稱通過接口方法獲取使用該枚舉的實例引用? 我可以看到您可以使用反射來發現特定枚舉的屬性,僅此而已。 有任何想法嗎?
您對使用反射是正確的:
從屬性文件中讀取類名稱后,請使用Class.forName
獲取正確的Class
對象。 確保輸入完整的類名。 您需要在此處捕獲各種檢查的異常。
請確保它是一個實現你的接口,與枚舉isEnum
方法和使用isAssignableFrom
從接口的方法Class
對象。
isEnum()&& YourInterface.class.isAssignableFrom(clazz)
使用靜態Enum.valueOf
方法可從String
獲取實際的枚舉常量,並將其Enum.valueOf
轉換為接口。
(YourInterface) Enum.valueOf(clazz, stringName)
我寫了這個...可能對您有幫助:
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.