[JAVA] [Kotlin] Récupère le nom de l'argument du constructeur par réflexion

TL;DR --De KClass qui peut être pris par réflexion de Kotlin, le nom d'argument du constructeur peut être pris avec le nom d'origine. --De la Classe qui peut être prise par le reflet de Java, le nom d'argument du constructeur ne peut être pris que comme" ʻarg0, ʻarg1, ʻarg2` ... "

Choses à faire

Extrayez le nom d'argument du constructeur de la classe suivante.

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

manière

Vous pouvez le faire dans les deux lignes suivantes.

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

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

Supplément

Je vais le compléter avec le reflet de Java (je le fais avec Java8, il semble qu'il y ait des changements autour de la réflexion dans les versions ultérieures, mais je ne peux pas le suivre).

Que se passe-t-il si vous le faites avec la réflexion Java

Ce sera comme suit.

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

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

Que se passe-t-il si vous le faites pour une classe Java

Faites-le pour la classe Java suivante.

@Getter //Hypothèse générée par lombok
public class JavaData {
    private final Integer sampleInt;
    private final String sampleStr;

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

Comme indiqué ci-dessous, le nom de l'argument ne peut pas être pris.

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

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

Recommended Posts

[Kotlin] Récupère le nom de l'argument du constructeur par réflexion
Récupère le nom d'objet de l'instance créée par le nouvel opérateur
Obtenez le nom de classe et le nom de méthode du contrôleur exécuté par le HandlerInterceptor de Spring Boot
Obtenez le nom d'anime de ce terme en grattant
Obtenez le nom du scénario de test dans la classe de test JUnit
Ruby, Nokogiri: récupère le nom de l'élément du nœud sélectionné
Comment obtenir le nom de classe de l'argument de LoggerFactory.getLogger lors de l'utilisation de SLF4J en Java
Lorsque vous utilisez le constructeur de la classe Date de Java, la date avance de 1900.
Ajoutez l'option -parameters à javac pour obtenir les noms d'arguments par réflexion
Obtenez l'ID de la numérotation automatique
E-mail envoyé par JavaMail Impossible de restaurer le nom de fichier du fichier joint par Gmail
Je veux obtenir le nom de champ du champ [Java]. (Vieux ton d'histoire)
[Java] Récupère MimeType à partir du contenu du fichier avec Apathce Tika [Kotlin]
Obtenez le résultat de POST en Java
[Java] Obtenez le jour d'un jour spécifique
Obtenir les noms de colonnes d'une instance de Model
[Rails] Changer le nom de l'étiquette de f.label
À propos du traitement de BigDecimal (avec réflexion)
Le contenu des données enregistrées par CarrierWave.
Je souhaite obtenir une liste de chaînes de caractères uniques uniquement en excluant les chaînes de caractères fixes du nom de fichier
graphql-ruby: Comment obtenir le nom de la requête ou de la mutation dans le contrôleur Remarque
[Rails] Obtenez le nom du chemin de l'URL avant la transition et modifiez la destination du lien
Nommer et appeler explicitement des méthodes de classe parent dans Ruby
J'ai été englouti par l'obscurité de Romaji essayant de convertir mon nom en Romaji
Mémo de support temporaire lorsque le nom du paramètre de méthode de la classe Java ne peut pas être obtenu par réflexion dans le projet de plug-in Eclipse
Empêcher les erreurs dans le nom de l'enregistreur en copiant
Vérifiez le contenu de l'objet argument avec Mockito
[Java] Appel de méthode dynamique par réflexion du type enum (enum)
Quand tu te perds dans le nom de la classe
[Java] Obtenir la longueur de la chaîne de paire de substitution
[JAVA] Récupère uniquement le nom du fichier, à l'exclusion de l'extension
Personnalisez le nom du bean défini par Spring component-scan
Comment obtenir le jour d'aujourd'hui
Renommez le nom du package d'un fichier jar existant
[Java / Kotlin] Redimensionner en tenant compte de l'orientation de l'image
Obtenez Enum en retirant du contenu
Le nom officiel de Spring MVC est Spring Web MVC
[Java] Obtenir KFunction à partir de la méthode / du constructeur en Java [Kotlin]
[Kotlin] La bibliothèque de mappage basée sur la réflexion basée sur Java ne fonctionne fondamentalement pas avec Kotlin.