(Обновлено) Я не эксперт в Kotlin, но вы можете сделать что-то вроде этого:
import kotlin.reflect.KClass
import kotlin.reflect.full.createInstance
class A {
fun greet() {
println("Hello A");
}
}
class B{
fun greet() {
println("Hello B");
}
}
fun <T : Any> maker(clazz: KClass<T>): T {
return clazz.createInstance();
}
val aObj = maker<A>(A::class);
aObj.greet();
val bObj = maker<B>(B::class);
bObj.greet();
Вывод:
Hello A
Hello B
Надеюсь, теперь это имеет смысл для вас просто нужно передать класс методу, и он вернет объект.
Поскольку вы будете использовать Animal в качестве родительского класса, вы можете заменить Any => Animal
fun <T : Animal> maker(clazz: KClass<T>): T {
return clazz.createInstance();
}