0
votes

Comment créer une instance d'une classe en passant le type

Je veux pouvoir dire faire une instance de cette classe et donner un type puis le code peut instancier une nouvelle instance de cette classe.

fun maker(type: Class<Animal>): Animal {
    if(type == Class<Dog>) {
       return Dog()
    } 
    else if (type == Class<Cat>) {}
    ...
}


1 commentaires

Vous ne pouvez pas simplement utiliser classe.newinstance () ?


4 Réponses :


0
votes

(mise à jour) Je ne suis pas un expert à Kotlin, mais vous pouvez faire quelque chose comme ceci: xxx pré>

sortie: p>

fun <T : Animal> maker(clazz: KClass<T>): T {
    return clazz.createInstance();
}


2 commentaires

Cela ne répond pas à la question. ObjectInstance ne crée pas de nouvelle instance; Il renvoie l'instance unique existante si le type est un objet ou autrement (comme dans ce cas) null.


Il est redondant de rendre le type réifié et de prendre un paramètre KcLass.



1
votes

Version correcte suivant votre exemple (pas sûr si la meilleure approche globale): xxx

puis créer des objets: xxx


0 commentaires

2
votes

S'ils ont tous des constructeurs zéro arguments, vous pouvez le faire:

fun <T: Animal> maker(type: Class<T>): T {
    return type.newInstance()
}


0 commentaires

0
votes

Si la fonction peut être inline Vous pouvez également utiliser réifié type xxx

Veuillez noter qu'à utiliser CreateInstance () La classe doit avoir un constructeur de no-arg ou illégalargumentexception être lancé


0 commentaires