Ajoutez l'option -parameters à javac pour obtenir les noms d'arguments par réflexion

Je voulais obtenir le nom de l'argument de la méthode en utilisant la réflexion en Java, mais je suis un peu coincé, alors prenez note.

En conclusion, au moment de la compilation, javac devait avoir l'option ** - parameters **. La procédure jusqu'à la vérification est la suivante.

Problème: le nom de l'argument obtenu par réflexion devient argN

import java.lang.reflect.Method;
import java.lang.reflect.Parameter;

public class GetArgsName {
	public static void main(String... args) throws NoSuchMethodException, SecurityException {

		Method m = Calc.class.getDeclaredMethod("add", int.class, int.class);
		Arrays.stream(m.getParameters())
			.map(Parameter::getName).forEach(System.out::println);
	}

	public static class Calc {
		public int add(int x, int y) {
			return x + y;
		}
	}
}

J'ai pensé que je pourrais obtenir le nom de l'argument avec le programme ci-dessus, et quand je l'ai exécuté, le résultat suivant a été obtenu.

arg0
arg1

Je voulais obtenir les noms d'argument x et y, mais pour une raison quelconque, je l'ai obtenu avec argN.

Solution: ajoutez l'option -parameters à javac

À la suite de diverses enquêtes, la réponse de Don Pisha a été écrite sur le site suivant. M. Hishidama m'est toujours redevable. Lol

Si vous souhaitez obtenir le nom de l'argument par réflexion, vous devez ajouter l'option ** - parameters ** à javac. De plus, lors de l'exécution avec Eclipse, c'est OK si vous vérifiez ce qui suit dans Propriétés> Compilateur Java du projet. Properties_for_amateras_allocate_claim_debt_fw.png

À la suite de son exécution à nouveau, j'ai pu obtenir le nom de l'argument comme prévu, comme indiqué ci-dessous.

x
y

Recommended Posts

Ajoutez l'option -parameters à javac pour obtenir les noms d'arguments par réflexion
[Kotlin] Récupère le nom de l'argument du constructeur par réflexion
Comment obtenir des paramètres dans Spark
[Rails] Ajoutez des paramètres forts pour concevoir
Ajouter des paramètres arbitraires à la sortie de l'URL par <h: outputScript> <h: outputStylesheet> de JSF