[JAVA] [Kotlin] Ermittelt den Argumentnamen des Konstruktors durch Reflektion

TL;DR

Dinge die zu tun sind

Extrahieren Sie den Argumentnamen des Konstruktors aus der folgenden Klasse.

data class Data(val sampleInt: Int, val sampleString: String)

Weise

Sie können dies in den folgenden zwei Zeilen tun.

val clazz: KClass<Data> = Data::class
val parameterNames: List<String> = clazz.constructors.first().parameters.map { it.name }

println(parameterNames) // -> [sampleInt, sampleString]

Ergänzung

Ich werde es mit der Reflexion von "Java" ergänzen (ich mache es mit "Java8", es scheint, dass es Änderungen in der Reflexion in späteren Versionen gibt, aber ich kann es nicht folgen).

Was passiert, wenn Sie dies mit Java Reflection tun?

Es wird wie folgt sein.

val clazz: Class<Data> = Data::class.java
val parameterNames: List<String> = clazz.constructors.first().parameters.map { it.name }

println(parameterNames) // -> [arg0, arg1]

Was passiert, wenn Sie dies für eine Java-Klasse tun?

Tun Sie dies für die folgende Java-Klasse.

@Getter //Annahme durch Lombok erzeugt
public class JavaData {
    private final Integer sampleInt;
    private final String sampleStr;

    public JavaData(Integer sampleInt, String sampleStr) {
        this.sampleInt = sampleInt;
        this.sampleStr = sampleStr;
    }
}

Wie unten gezeigt, kann der Argumentname nicht übernommen werden.

val clazz: KClass<JavaData> = JavaData::class
val parameterNames: List<String> = clazz.constructors.first().parameters.map { it.name }

println(parameterNames) // -> [arg0, arg1]

Recommended Posts

[Kotlin] Ermittelt den Argumentnamen des Konstruktors durch Reflektion
Ruft den Objektnamen der vom neuen Operator erstellten Instanz ab
Ruft den Klassennamen und den Methodennamen des Controllers ab, der vom HandlerInterceptor von Spring Boot ausgeführt wird
Holen Sie sich den Anime-Namen für diesen Begriff durch Scraping
Rufen Sie den Namen des Testfalls in der JUnit-Testklasse ab
Ruby, Nokogiri: Ruft den Elementnamen des ausgewählten Knotens ab
So erhalten Sie den Klassennamen des Arguments von LoggerFactory.getLogger, wenn Sie SLF4J in Java verwenden
Bei Verwendung des Konstruktors der Date-Klasse von Java wird das Datum um 1900 vorverlegt.
Fügen Sie javac die Option -parameters hinzu, um Argumentnamen durch Reflektion zu erhalten
Holen Sie sich die ID der automatischen Nummerierung
Von JavaMail gesendete E-Mails Der Dateiname der angehängten Datei kann von Google Mail nicht wiederhergestellt werden
Ich möchte den Feldnamen des [Java] -Felds erhalten. (Alter Ton)
[Java] Holen Sie sich MimeType aus dem Inhalt der Datei mit Apathce Tika [Kotlin]
Holen Sie sich das Ergebnis von POST in Java
[Java] Ermittelt den Tag eines bestimmten Tages
Ruft Spaltennamen von einer Instanz von Model ab
[Rails] Ändern Sie den Labelnamen von f.label
Über die Behandlung von BigDecimal (mit Reflexion)
Der Inhalt der von CarrierWave gespeicherten Daten.
Ich möchte eine Liste nur eindeutiger Zeichenfolgen erhalten, indem feste Zeichenfolgen vom Dateinamen ausgeschlossen werden
graphql-ruby: So erhalten Sie den Namen der Abfrage oder Mutation im Controller Hinweis
[Rails] Ruft den Pfadnamen der URL vor dem Übergang ab und ändert das Linkziel
Benennen und rufen Sie in Ruby übergeordnete Klassenmethoden explizit auf
Ich wurde von der Dunkelheit Romajis verschluckt, als ich versuchte, meinen Namen in Romaji umzuwandeln
Temporäres Support-Memo, wenn der Name des Methodenparameters der Java-Klasse nicht durch Reflektion im Eclipse-Plug-In-Projekt abgerufen werden kann
Verhindern von Fehlern im Logger-Namen durch Kopieren
Überprüfen Sie den Inhalt des Argumentobjekts mit Mockito
[Java] Dynamischer Methodenaufruf durch Reflektion des Aufzählungstyps (Aufzählung)
Wenn Sie sich im Klassennamen verlieren
[Java] Ermittelt die Länge der Ersatzpaarzeichenfolge
[JAVA] Nur den Dateinamen abrufen, ausgenommen die Erweiterung
Passen Sie den durch Spring Component-Scan festgelegten Bean-Namen an
Wie komme ich zum heutigen Tag?
Benennen Sie den Paketnamen einer vorhandenen JAR-Datei um
[Java / Kotlin] Ändern Sie die Größe unter Berücksichtigung der Ausrichtung des Bildes
Holen Sie sich Enum, indem Sie sich vom Inhalt zurückziehen
Der offizielle Name von Spring MVC ist Spring Web MVC
[Java] KFunction von Method / Constructor in Java abrufen [Kotlin]
[Kotlin] Die auf Java basierende Mapping-Bibliothek funktioniert grundsätzlich nicht mit Kotlin.