Eu tenho um Class<?> myClass = ...; e, em myClass eu posso ter - ou não - uma constante com um determinado nome “THE_CONSTANT_VALUE”:
static final int THE_CONSTANT_VALUE = 15;
-
Então, como eu posso usar myClass para saber se ela possui uma constante com o nome “THE_CONSTANT_VALUE”?
-
Se myClass tiver essa Constante, como eu posso obter o valor dela?
Meu desejo é obter o valor da constante sem precisar instanciar myClass.
Exemplo de método utilitário:
public static Field getConstant(Class<?> type, String name) {
while (type != null) {
try {
Field field = type.getDeclaredField(name);
int modifiers = field.getModifiers();
if (Modifier.isStatic(modifiers) && Modifier.isFinal(modifiers)) {
field.setAccessible(true);
return field;
}
} catch (NoSuchFieldException e) {
// não possui um atributo com este nome
}
type = type.getSuperclass();
}
return null;
}
Exemplo de uso:
Class<?> objetoClass = /* inicialização */;
String nome = /* nome da contante */;
Field constante = getConstant(objetoClass, nome);
if (constante != null) {
Object valor = constante.get(null);
}
1 curtida