2017-01-20 1 views
0

Мне нужно написать уровень сервиса api, который предоставляет любое перечисление во время выполнения. Имя перечисления будет передано в качестве строкового параметра на уровень сервиса. Значит, мне нужно использовать отражение.Как получить доступ к значениям любого известного перечисления во время выполнения при передаче значения String для перечисления?

Все ответы, которые я нашел до сих пор, имеют дело с тем, чтобы заранее узнать имя перечисления.

  1. У меня будет строка, содержащая имя перечисления.
  2. Посмотрите на перечисление, используя отражение (как-то).
  3. Возврат строковые представления значений, связанных с перечислением
+0

Как это: HTTP: // StackOverflow .com/вопросы/4783543/get-values-from-enum-known-only-at-runtime? –

+1

Так что используйте отражение со строкой, чтобы найти перечисление в первую очередь, а затем используйте это предложение. Хм. ОК. С чем работать. Благодарю. –

+0

Возможный дубликат [Получить значения из Enum, известного только в Runtime] (http://stackoverflow.com/questions/4783543/get-values-from-enum-known-only-at-runtime) –

ответ

1

попробовать что-то вроде этого:

package demo; 

import java.util.Arrays; 

public class Main { 

    public static void main(String[] args) throws Exception { 

     // ClassNotFoundException thrown when demo.Color does not exist 
     Class<?> enumType = Class.forName("demo.Color"); 

     // constants is null when demo.Color is not an enum 
     Object[] constants = enumType.getEnumConstants(); 

     System.out.println("is " + enumType + " an enum? " + enumType.isEnum()); 
     System.out.println(Arrays.toString(constants)); 
    } 
} 

enum Color { 
    GREEN, 
    BLUE 
} 
+0

Работы. Спасибо. Как только я закончу, я вернусь и отдам кредит. –

1

Вы можете использовать это:

public static <E extends Enum<E>> List<E> getValues(final String className) throws ClassNotFoundException { 
     List<E> lst = null; 
     if(className != null) { 
      Class<E> clazz = Class.forName(className); 
      E[] enumConstants = (E[]) clazz.getEnumConstants(); 
      lst = Arrays.asList(enumConstants);     
     } 
     return lst; 
    } 
+0

Спасибо. Очень чисто и точно. –

Смежные вопросы