Сначала создайте метод, который возвращает желаемый класс перечисления:
public Class<? extends Enum<?>> getEnum(int param)
{
// Determine enumeration class based on specified parameter
switch (param)
{
case 1:
return (Enum1.class);
case 2:
return (Enum2.class);
default:
return (null);
}
} // getEnum
Затем создайте метод, который возвращает желаемый экземпляр:
public Object getEnumInstance(Class<? extends Enum<?>> clazz,
String name)
throws Exception
{
// Determine the 'valueOf()' method that creates an instance from a string
// Every enumeration class has a static valueOf() method that expects a String as a parameter
Method value_of_method;
value_of_method = clazz.getDeclaredMethod("valueOf", String.class);
// Get and return instance
return (value_of_method.invoke(null, name));
} // getEnumInstance
Затем создайте метод, который возвращаетзначение указанного перечисления:
public String getEnumValue(Object enum_instance)
throws Exception
{
// Determine the 'getValue()' method of this enumeration instance
// At least, I suppose the method is called like that in your enumeration classes
// It doesn't want parameters and returns a String
Method get_value_method;
get_value_method = enum_instance.getClass().getMethod("getValue");
// Return value of the enumeration instance
return ((String)get_value_method.invoke(enum_instance));
} // getEnumValue
Наконец, создайте метод, который объединяет весь материал:
public String decide(int param,
String enum_instance_name)
throws Exception
{
// Get correct enumeration class
Class<? extends Enum<?>> enum_class;
enum_class = getEnum(param);
// Get correct instance
Object enum_instance;
enum_instance = getEnumInstance(enum_class, enum_instance_name);
// Return its value
return (getEnumValue(enum_instance));
} // decide
Теперь мы наконец можем сделать то, что должны сделать:
public void run()
throws Exception
{
// Get password of 2nd enum
String result;
result = decide(2, "PASSWORD");
System.out.println(result);
// Or username of 1st enum
result = decide(1, "USERNAME");
System.out.println(result);
} // run