Digamos que tengo una clase:
public class R {
public static final int _1st = 0x334455;
}
¿Cómo puedo obtener el valor de "_1st" mediante la reflexión?
BR
clase.
Digamos que tengo una clase:
public class R {
public static final int _1st = 0x334455;
}
¿Cómo puedo obtener el valor de "_1st" mediante la reflexión?
BR
clase.
Respuestas:
Primero recupere la propiedad de campo de la clase, luego puede recuperar el valor. Si conoce el tipo, puede usar uno de los métodos get con nulo (solo para campos estáticos, 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 como se muestra a continuación:
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));
}...
getInt()
ignora el argumento pasado? Pasé horas intentando que la instancia de la clase pasara allí.
R.class.getField("_1st").get(null);
El manejo de excepciones se deja como ejercicio para el lector.
Básicamente, obtiene el campo como cualquier otro a través de la reflexión, pero cuando llama al método get, pasa un nulo ya que no hay una instancia sobre la que actuar.
Esto funciona para todos los campos estáticos, independientemente de que sean definitivos. Si el campo no es público, setAccessible(true)
primero debe llamarlo y, por supuesto, SecurityManager debe permitir todo esto.
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 Resources. Yo tenía razón.
Encontré esto: Resources :: getIdentifier
Pensé que podría ahorrarle tiempo a la gente. Aunque dicen que está desanimado en los documentos, lo cual no es demasiado sorprendente.
R._1st
no pudo trabajar? Si estás hablando de desarrollo de Android, creo que laR
clase siempre está ahí ...