Предполагая, что ваш класс MyConstants
заполнен String
константами, и вы хотели, чтобы решение, включающее рефлексию, было простым способом сделать это:
public final class MyConstants {
public static final String MY_CONST_1 = "CONST_1";
public static final String MY_CONST_2 = "CONST_2";
public static final String MY_CONST_3 = "CONST_3";
public static final String MY_CONST_4 = "CONST_4";
}
public static void main(String[] args) throws IllegalAccessException
{
MyConstants constants = new MyConstants();
java.util.Map<String, String> map = new java.util.LinkedHashMap<>();
Field[] fields = constants.getClass().getDeclaredFields();
for (Field field : fields) {
map.put(field.getName(), (String) field.get(constants));
}
for (java.util.Map.Entry<String, String> entry : map.entrySet()) {
System.out.printf("Key: %s, Value: %s%n", entry.getKey(), entry.getValue());
}
}
выход
Key: MY_CONST_1, Value: CONST_1
Key: MY_CONST_2, Value: CONST_2
Key: MY_CONST_3, Value: CONST_3
Key: MY_CONST_4, Value: CONST_4
Однако, если вам нужен более продвинутый подход, свободный от наиболее распространенных ошибок, я бы порекомендовал использовать методы Apache Commons Language library
и FieldUtils#readField(Field, Object, boolean)
, которые поставляются вместе с ним. Я написал вспомогательный метод, который будет приводить объект к вашему и выдавать соответствующие исключения, облегчая отладку. Вы можете найти метод в моем ReflectionUtils классе как часть моего личного Commons проекта на Github.