3 votes

KOTLIN convertir une chaîne en un type générique

Je veux lire une ligne d'entrée et la convertir en type générique. quelque chose comme

fun  R() : T {
  return readLine()!!.toType(T)
}

donc pour R() cela appellera toInt() pour long toLong() etc. comment réaliser une telle chose? Au fait, est-il possible d'avoir un type générique par défaut (C++ le permet) au cas où vous ne en fournissez pas un

2voto

Serg_ Points 12

Vous pouvez écrire une fonction en ligne générique avec un paramètre de type reified:

inline fun  read() : T {
    val value: String = readLine()!!
    return when (T::class) {
        Int::class -> value.toInt() as T
        String::class -> value as T
        // ajouter d'autres types ici si besoin
        else -> throw IllegalStateException("Type Générique Inconnu")
    }
}

Le paramètre de type reified est utilisé pour accéder au type du paramètre passé.

Appel de la fonction :

val resultString = read()
try {
    val resultInt = read()
} catch (e: NumberFormatException) {
    // assurez-vous de catcher NumberFormatException si la valeur ne peut pas être convertie
}

0voto

Vinny_Vl Points 1

Vous pouvez simplement vérifier le type T: si c'est un int - le convertir en int, si c'est un long - le convertir en long. Et renseignez-vous sur les mots-clés "out" et "refied"

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X