繁体   English   中英

Kotlin 不允许将 T::class.java 作为参数化的类类型提供给 java 方法

[英]Kotlin does not allow T::class.java as a paramterized class type given to a java method

我即将使我的服务成为通用的。 但是,在尝试将通用 Kotlin 类型T传递给需要类的 Java 方法时,我没有这样做。 使用普通类型我会像MyClass::class.java那样做。 对于泛型我做T::class.java 然而,这似乎是无效的。

Cannot use 'T' as reified type parameter. Use a class instead.

发生在这里return mongoTemplate.aggregate(resolvedDocument, T::class.java).mappedResults[0]

服务:

@Service
class DocumentAggregator<T: Output>(
    @Autowired
    private val mongoTemplate: MongoTemplate
) {
    fun <S: DocumentEntity>aggregate(document: S): T? {
        val resolvedDocument: TypedAggregation<DocumentEntity> = // logic

        return mongoTemplate.aggregate(resolvedDocument, T::class.java).mappedResults[0]
    }
}

您应该尝试将reified关键字添加到泛型参数中,如下所示:

class DocumentAggregator<reified T: Output>

这样该类将在运行时出现。 就像您添加额外的Class<T>参数一样,只需使用漂亮的 Kotlin 语法糖即可。

编辑:关于评论,问题是您是否需要类上的泛型。 编译(感谢威利指出错误)将是:

class Output

class DocumentAggregator(
    private val mongoTemplate: Any?
) {
    inline fun <S, reified T: Output>aggregate(document: S): T? {
        return null
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM