Pregunta Obtener el valor del campo / propiedad final estático público de una clase en Java a través de la reflexión


Digamos que tengo una clase:

public class R {
    public static final int _1st = 0x334455;
}

¿Cómo puedo obtener el valor del campo / propiedad "_1st" a través de la reflexión?


74
2018-04-21 17:57


origen


Respuestas:


Primero recupera la propiedad de campo de la clase, luego puedes recuperar el valor. Si conoce el tipo, puede usar uno de los métodos get con null (para campos estáticos solamente, de hecho con un campo estático, el argumento pasado al método get se ignora por completo). De lo contrario, puede usar getType y escribir un modificador apropiado de la siguiente manera:

Field f = R.class.getField("_1st");
Class<?> t = f.getType();
if(t == int.class){
    System.out.println(f.getInt(null));
}else if(t == double.class){
    System.out.println(f.getDouble(null));
}...

99
2018-04-21 18:06



 R.class.getField("_1st").get(null);

El manejo de excepciones se deja como un ejercicio para el lector.

Básicamente obtienes el campo como cualquier otro a través de la reflexión, pero cuando llamas al método get, pasas un nulo ya que no hay ninguna instancia para actuar.

Esto funciona para todos los campos estáticos, independientemente de que sean definitivos. Si el campo no es público, debe llamar setAccessible(true) primero, y por supuesto SecurityManager tiene que permitir todo esto.


47
2018-04-21 18:01



Estaba siguiendo la misma ruta (mirando a través de la clase R generada) y luego tuve la terrible sensación de que probablemente era una función en la clase de Recursos. Yo tenía razón.

Encontró esto: Recursos :: getIdentifier

Pensé que podría salvar a la gente un tiempo. Aunque dicen que es desalentada en los documentos, lo cual no es demasiado sorprendente.


1
2017-12-01 17:50