Seit Java8 ist es möglich, den Parameternamen der Methode einschließlich des Konstruktors der Klasse durch Reflektion abzurufen. Durch Kompilieren mit der zu javac
hinzugefügten Option -parameters
werden die dafür erforderlichen Informationen in der Klassendatei gespeichert.
In Eclipse können Sie beispielsweise im Fall eines Java-Projekts ein entsprechendes JAR erstellen, indem Sie in den Einstellungen, die allen Projekten oder für jedes Projekt gemeinsam sind, Folgendes überprüfen und exportieren. Möglicherweise wird durch Aktivieren die Option -parameters
intern festgelegt und kompiliert.
Es ist einfach, aber Sie können den Parameternamen überprüfen, indem Sie die Referenz aus dem Verweis auf den Konstruktor oder das Methodenobjekt wie folgt verwenden.
for (Constructor<?> constructor : clazz.getDeclaredConstructors()) {
System.out.println("constructor: " + constructor.getName());
for (Parameter param : constructor.getParameters()) {
System.out.println(" param: " + param.getName() + ", type: " + param.getType().getSimpleName());
}
}
for (Method method : clazz.getDeclaredMethods()) {
System.out.println("method: " + method.getName());
for (Parameter param : method.getParameters()) {
System.out.println(" param: " + param.getName() + ", type: " + param.getType().getSimpleName());
}
}
Im Fall eines Plug-In-Projekts scheint diese Einstellung jedoch aus irgendeinem Grund nicht zu funktionieren, und im exportierten "jar" (oder Bundle) lauten die Methodenparameternamen "arg0, arg1, arg2 ..." Es wird sein. Solche Namen werden automatisch vergeben, wenn Sie die Option "-parameters" nicht angeben. Die von Ihnen verwendete Eclipse-IDE lautet "Version: 2020-06 (4.16.0) Build-ID: 20200615-1200". (Vielleicht die neueste)
Im Falle eines Plug-In-Projekts sieht es daher so aus, als ob es tatsächlich kompiliert wird, ohne die Option "-paramters" zu verwenden, selbst wenn Sie es überprüfen. Wenn Sie dies aktivieren, wird die folgende Zeile zur folgenden Datei hinzugefügt.
org.eclipse.jdt.core.compiler.codegen.methodParameters=generate
Beim Exportieren in ein Projekt mit dieser Einstellung wird erwartet, dass ein "jar" erstellt wird, in dem der Parametername der Methode durch Reflektion erhalten werden kann.
Im Fall eines Plug-In-Projekts ist es nützlich, eine "MANIFEST.MF" zu erstellen, die die Abhängigkeit des Bundles deutlich zeigt, und auf einfache Weise ein OSGi-Bundle zu erstellen. Dieser Fall war jedoch recht unpraktisch.
Lesen Sie daher nach dem Erstellen eines Java-Projekts mit derselben Quelle wie das Plug-In-Projekt die Vorlage von "MANIFEST.MF", mit der die im Plug-In-Projekt erstellte Bundle-Abhängigkeit behoben wurde. Ich habe beschlossen, ein OSGi-Bundle zu erstellen. (Es ist einfach)
Dies ist ein Memorandum. (Vielleicht stimmt etwas nicht?)
Recommended Posts