考虑以下代码:
data class Container<T>(val type: Class<T>)
假设我想将其与通用和非通用类型一起使用:
class GenericType<T>
class NonGenericType
到目前为止,这适用于非泛型类型:
val container: Container<NonGenericType> = Container(NonGenericType::class.java)
但它不适用于泛型类型:
val container: Container<GenericType<String>> = Container(GenericType::class.java)
类型不匹配。
必填:容器
发现:容器
>
此时,值得注意的是,这段代码的 Java 实现也会发生同样的事情。
在 Kotlin 中,我们可以使用带有
inline
泛型参数的 reified
函数来解决这个问题:
data class Container<T>(val type: Class<T>) {
companion object {
inline fun <reified T> create(): Container<T> {
return Container(T::class.java)
}
}
}
// OK!
val container: Container<GenericType<String>> = Container.create()
由于
inline
/reified
函数不能从 Java 调用,是否有另一种方法解决这个问题,以便我可以在 Java 中创建 Container<T>
的 GenericType<>
?