L'accès Java static final de la valeur de la variable par le biais de la réflexion
Peut la valeur de Java static final de la variable de classe d'être récupérées par le biais de la réflexion?
Vous devez vous connecter pour publier un commentaire.
Peut la valeur de Java static final de la variable de classe d'être récupérées par le biais de la réflexion?
Vous devez vous connecter pour publier un commentaire.
je suppose que cela dépend du type et le compilateur(sur la deuxième pensée, il avait certainement mieux pas!). Le compilateur de Sun inlines primitive constantes, mais je ne sais pas si ils supprimez l'entrée de la classe entièrement. Je vais trouver.Edit: Oui, vous pouvez toujours y accéder même si elles sont intégrées. La classe de Test:
De sortie:
javap -c
de sortie:Vous pouvez voir que
CONST_INT
est inline, maisCONST_STRING
etCONST_OBJECT
(bien sûr) ne le sont pas. EncoreCONST_INT
est toujours disponible reflectively.Oui. (Seulement il n'y a pas une telle chose comme statique, de l'instance. Il est statique, non de l'instance.)
> Si le champ sous-jacent est un champ statique, l'obj argument est ignoré; il peut être null.
(standard avertissement que la plupart des utilisations de réflexion sont une mauvaise idée)
Si les bibliothèques open source sont autorisés sur votre projet, vous pouvez utiliser
FieldUtils.readDeclaredStaticField
Dans une autre classe, vous pouvez utiliser:
Vous verrez "myConstantValue" dans la console.
Simplement d'obtenir le nom et la valeur ne nécessite pas de setAccessible(true). Voici un exemple utile lorsque vous avez à traiter avec des constantes déclarées dans une interface, et que vous voulez les noms symboliques: