Como llegar constantes declaradas en una clase como un mapa

Andrei:

Estoy tratando de encontrar una manera de constantes de acceso declarada en una clase, desde fuera de la clase como un mapa

public final class MyConstants {
    public static final MY_CONST_1 = "CONST_1";
    public static final MY_CONST_2 = "CONST_2";
    public static final MY_CONST_3 = "CONST_3";
    public static final MY_CONST_4 = "CONST_4";
}

Mi intento es conseguir que todas las constantes declaradas en MyConstants en un mapa con el nombre de la const como la clave y el valor que el valor

Mateo:

Asumiendo que su MyConstantsclase se rellena con Stringconstantes y que quería una solución que implica la reflexión que aquí hay una forma sencilla de hacerlo:

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());
    }
}

Salida

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

Sin embargo, si usted quiere un enfoque más avanzado que está libre de las trampas más comunes que recomendaría el uso Apache Commons Language libraryy el FieldUtils#readField(Field, Object, boolean)método que viene con él. He escrito un método de utilidad que va a enviar el objeto para su y lanzar excepciones apropiadas por lo que es más fácil de depurar. Puede encontrar el método en mi clase ReflectionUtils como parte de mi personal Commons proyecto en Github.

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=332113&siteId=1
Recomendado
Clasificación