我在Java中有四个枚举文件,例如:A.java,B.java,C.java。 现在我的要求是我有一个参数让我们说filename,如果我得到filename参数为A,它将执行A.java的文件,即A.Red与其他情况类似。 文件名将来自restAPI。
我正在尝试使用接口,即我创建了一个接口并在所有枚举上实现它,并尝试在接口中捕获枚举引用,但是这种方法的问题是我无法创建枚举实例。 这就是我尝试过的:
String enumClassName = "enums.A";
Class c = Class.forName(enumClassName);
//System.out.println(c.);
Object obj = c.newInstance();
SystemEnums enums = (SystemEnums)obj;
System.out.println(enums.getEnumType().get(0));
在界面中找到SystemEnums。
A.java
enum A{
Red,Blue
}
B.java
enum B{
Yellow,Black
}
C.java
enum C{
Pink,White
}
答案 0 :(得分:2)
关于某种注册表,该注册表知道所有可用的枚举类型。注册表然后可以具有这样的方法:getEnumByName(String enumName)。
我认为这里实际上并不需要通用接口,因为您可以使用标准枚举。
请参见以下示例:
import java.util.Map;
public class Test {
public static void main(String[] args) throws ReflectiveOperationException {
EnumRegistry registry = new EnumRegistry();
registry.registerEnum(A.class);
registry.registerEnum(B.class);
registry.registerEnum(C.class);
final Enum enumByName = registry.getEnumByName("A");
}
}
enum A {
Red,
Blue
}
enum B {
Yellow,
Black
}
enum C {
Pink,
White
}
public class EnumRegistry {
private Map<String, Class<Enum>> registeredEnums = new HashMap<?>();
public void registerEnum(Class e) {
registeredEnums.put(e.getName(), e);
}
public Enum getEnumByName(String name) throws ReflectiveOperationException {
final Class<Enum> enumClass = registeredEnums.get(name);
if (enumClass != null) {
return enumClass.newInstance();
} else {
return null;
}
}
}
答案 1 :(得分:0)
如果要从反映的枚举类中获取枚举实例,只需使用values
:
package x;
public class EnumTest {
public enum TestEnum {
A, B, C
}
public static void main(String[] args) throws Exception {
Class<?> enumClass = Class.forName("x.EnumTest$TestEnum");
Object[] enumInstances = (Object[]) enumClass.getMethod("values").invoke(null);
for (Object enumInstance : enumInstances) {
System.out.println(enumInstance);
}
}
}
请注意,每次调用值都会创建一个新数组,并且可能会很昂贵。