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>) {}
...
}
4 Réponses :
(mise à jour) Je ne suis pas un expert à Kotlin, mais vous pouvez faire quelque chose comme ceci: sortie: p> fun <T : Animal> maker(clazz: KClass<T>): T {
return clazz.createInstance();
}
Cela ne répond pas à la question. ObjectInstance Code > 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.
Version correcte suivant votre exemple (pas sûr si la meilleure approche globale): puis créer des objets: p>
S'ils ont tous des constructeurs zéro arguments, vous pouvez le faire:
fun <T: Animal> maker(type: Class<T>): T {
return type.newInstance()
}
Si la fonction peut être Veuillez noter qu'à utiliser inline code> Vous pouvez également utiliser réifié type CreateInstance () code> La classe doit avoir un constructeur de no-arg ou illégalargumentexception code> être lancé p> p>
Vous ne pouvez pas simplement utiliser
classe.newinstance () code>?