我想使用枚举实现基本状态机;枚举实现一个接口来管理允许的状态转换。但是我想在属性文件中配置一个实现接口的枚举类名列表,并且应该在特定的上下文中使用。上下文在运行时确定,并且该上下文键映射到属性文件中的属性键。一旦我从属性文件中获取上下文的枚举类名称,如何使用该类名称来获取实例引用以通过接口方法使用该枚举?我可以看到您可以使用反射来发现特定枚举的属性,但就是这样。有任何想法吗?获取对从枚举类名实现接口的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