我想用枚举实现一个基本的状态机;枚举实现了一个接口来管理允许的状态转换。但我想在属性文件中配置实现接口的枚举类名列表,并应在特定上下文中使用。上下文是在运行时确定的,并且该上下文键映射到属性文件中的属性键。从属性文件中获取上下文的枚举类名后,如何使用该类名获取实例引用以通过接口方法使用该枚举?我可以看到您可以使用反射来发现特定枚举的属性,仅此而已。有任何想法吗?
问问题
3466 次
3 回答
1
你是对的使用反射:
从属性文件中读取类名后,用于
Class.forName
获取正确的对象。Class
确保传入完全限定的类名。您需要在此处捕获各种已检查的异常。确保它是一个实现您的接口的枚举,使用
isEnum
方法并使用isAssignableFrom
接口Class
对象中的方法。isEnum() && YourInterface.class.isAssignableFrom(clazz)
使用静态
Enum.valueOf
方法从 a 获取实际的枚举常量String
并将其转换为您的接口。(YourInterface) Enum.valueOf(clazz, stringName)
于 2013-06-25T21:23:23.757 回答
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
于 2013-06-25T21:28:12.507 回答
0
于 2013-06-25T23:12:45.107 回答