Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Kotlin中,如何从字符串中获取类并将其分配给具有超类类型的变量?_Kotlin - Fatal编程技术网

在Kotlin中,如何从字符串中获取类并将其分配给具有超类类型的变量?

在Kotlin中,如何从字符串中获取类并将其分配给具有超类类型的变量?,kotlin,Kotlin,现在我用的是这句话: klass=Class.forName({MyClassName}).kotlin作为KClass 但我得到了一个“未经检查的演员”警告 有更好的方法吗?我看不到避免此警告的方法,因为.kotlin是Class的扩展,这就是Class.forName()返回的内容(从Java翻译过来时)。所以你实际做的是这样的: Class.forName() -> Class<T: Any>.kotlin -> KClass<T: Any> as KC

现在我用的是这句话:
klass=Class.forName({MyClassName}).kotlin作为KClass

但我得到了一个“未经检查的演员”警告


有更好的方法吗?

我看不到避免此警告的方法,因为
.kotlin
Class
的扩展,这就是
Class.forName()
返回的内容(从Java翻译过来时)。所以你实际做的是这样的:

Class.forName() -> Class<T: Any>.kotlin -> KClass<T: Any> as KClass<{MySuperClassName}>
Class.forName()->Class.kotlin->KClass作为KClass

您正在将
KClass
强制转换为
KClass
,这将始终产生警告,因为编译器无法判断
MySuperClassName
是否实际上是
t
的后代,因为此时
t
可以是任何内容。

此强制转换实际上不正确;
不是
。它只是不会抛出异常,因为正如警告所说,强制转换是未选中的。您可能需要的类型是
Class
(基本上是指
Class

修正类型不会修正警告,原因已在科德萨洛特爵士的回答中解释

但是你可以使用
@Suppress(“UNCHECKED_CAST”)
因为没有更好的方法