这个 Kotlin 具体化泛型函数是否有 Java 解决方案?

问题描述 投票:0回答:0

考虑以下代码:

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<>

java kotlin
© www.soinside.com 2019 - 2024. All rights reserved.