Как мне передать класс / класс класса Kotlin из String?

Я получаю класс с Class.forName("classname").kotlin .

Я знаю, что класс реализует Interface , который чрезвычайно прост (если у вас есть решение, отличное от того, что, на мой взгляд, тоже отлично работает)

 interface Runner { fun run(): String } 

Когда я пытаюсь использовать класс, чтобы использовать функцию, как это

 val result = (Class.forName("classname").kotlin as Runner).run() 

Я получаю следующую ошибку:

 kotlin.reflect.jvm.internal.KClassImpl cannot be cast to Runner 

Есть ли способ сделать эту работу? Я также попробовал его с Class.forName("classname").kotlin.functions а затем попытался выполнить функцию оттуда, но у меня не было успеха.

Если вы знаете решение Java для этой проблемы (вызов функции из имени класса), может быть, тоже приятно это услышать.

Проблема заключается в том, что Class.forName("...").kotlin возвращает KClass , который представляет только класс и не является экземпляром класса, на который вы ссылались. Чтобы создать экземпляр этого класса, вы можете использовать createInstance() :

 val kclass = Class.forName("classname").kotlin val instance = kclass.createInstance() as Runner println(instance.run()) 

Обратите внимание, что для работы createInstance класс нуждается в конструкторе, который может быть вызван без аргументов (так что он не имеет параметров или тот, который имеет значения по умолчанию для всех своих параметров).