Digamos que eu tenha uma aula:
public class R {
public static final int _1st = 0x334455;
}
Como posso obter o valor de "_1st" via reflexão?
java
reflection
static
final
Viet
fonte
fonte
R._1st
não funcionou? Se você está falando sobre desenvolvimento Android, acho que aR
aula está sempre lá ...BR
classe.Respostas:
Primeiro, recupere a propriedade do campo da classe, então você pode recuperar o valor. Se você souber o tipo, poderá usar um dos métodos get com null (apenas para campos estáticos; na verdade, com um campo estático o argumento passado para o método get é totalmente ignorado). Caso contrário, você pode usar getType e escrever uma opção apropriada conforme abaixo:
fonte
getInt()
ignora o argumento passado? Passei horas tentando fazer com que a instância da classe passasse ali.O tratamento de exceções é deixado como um exercício para o leitor.
Basicamente, você obtém o campo como qualquer outro por meio de reflexão, mas ao chamar o método get, você passa um nulo, pois não há instância para agir.
Isso funciona para todos os campos estáticos, independentemente de serem finais. Se o campo não for público, você precisa chamá
setAccessible(true)
-lo primeiro e, claro, o SecurityManager deve permitir tudo isso.fonte
Eu estava seguindo a mesma rota (olhando através da classe R gerada) e então tive a terrível sensação de que provavelmente era uma função da classe Recursos. Eu tinha razão.
Encontrou isto: Resources :: getIdentifier
Achei que isso pudesse economizar algum tempo. Embora digam que é desencorajado nos documentos, o que não é muito surpreendente.
fonte