Fügen Sie javac die Option -parameters hinzu, um Argumentnamen durch Reflektion zu erhalten

Ich wollte den Argumentnamen der Methode mithilfe von Reflection in Java ermitteln, bin aber ein wenig festgefahren. Machen Sie sich also eine Notiz.

Zum Zeitpunkt der Kompilierung musste javac die Option ** - parameters ** haben. Das Verfahren bis zur Überprüfung ist wie folgt.

Problem: Der durch Reflexion erhaltene Argumentname wird zu 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;
		}
	}
}

Ich dachte, ich könnte den Argumentnamen mit dem obigen Programm erhalten, und als ich es ausführte, wurde das folgende Ergebnis erhalten.

arg0
arg1

Ich wollte die Argumentnamen x und y erhalten, aber aus irgendeinem Grund habe ich sie mit argN erhalten.

Lösung: Fügen Sie javac die Option -parameters hinzu

Als Ergebnis verschiedener Untersuchungen wurde Don Pishas Antwort auf der folgenden Seite geschrieben. Herr Hishidama ist mir immer zu Dank verpflichtet. Lol

Wenn Sie den Argumentnamen durch Reflektion erhalten möchten, müssen Sie javac die Option ** - parameters ** hinzufügen. Bei der Ausführung mit Eclipse ist es außerdem in Ordnung, wenn Sie unter Eigenschaften> Java-Compiler des Projekts Folgendes überprüfen. Properties_for_amateras_allocate_claim_debt_fw.png

Durch die erneute Ausführung konnte ich den Argumentnamen wie erwartet wie unten gezeigt erhalten.

x
y

Recommended Posts

Fügen Sie javac die Option -parameters hinzu, um Argumentnamen durch Reflektion zu erhalten
[Kotlin] Ermittelt den Argumentnamen des Konstruktors durch Reflektion
So erhalten Sie Parameter in Spark
[Schienen] Fügen Sie starke Parameter hinzu, um sie zu entwickeln
Fügen Sie der URL, die von <h: outputScript> <h: outputStylesheet> von JSF ausgegeben wird, beliebige Parameter hinzu