Ottenere valore del campo finale statico pubblico / proprietà di una class in Java tramite riflessione

Dì che ho una class:

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

Come posso ottenere il valore del campo / proprietà “_1st” tramite riflessione?

Prima recuperare la proprietà del campo della class, quindi è ansible recuperare il valore. Se conosci il tipo puoi usare uno dei metodi get con null (solo per i campi statici, infatti con un campo statico l’argomento passato al metodo get viene completamente ignorato). Altrimenti puoi usare getType e scrivere un interruttore appropriato come di seguito:

 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)); }... 
  R.class.getField("_1st").get(null); 

La gestione delle eccezioni è lasciata come esercizio per il lettore.

Fondamentalmente si ottiene il campo come qualsiasi altro tramite riflessione, ma quando si chiama il metodo get si passa in un null poiché non c’è istanza su cui agire.

Funziona su tutti i campi statici, indipendentemente dal fatto che siano definitivi. Se il campo non è pubblico, devi prima chiamare setAccessible(true) e, naturalmente, SecurityManager deve consentire tutto questo.

Stavo seguendo lo stesso percorso (guardando attraverso la class R generata) e poi ho avuto questa sensazione terribile che probabilmente era una funzione nella class Risorse. Avevo ragione.

Trovato questo: Resources :: getIdentifier

Pensavo che potesse salvare le persone un po ‘di tempo. Anche se dicono che è scoraggiato nei documenti, che non è troppo sorprendente.