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



我即将使我的一项服务通用化。然而,当我试图将一个泛型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语法糖。

编辑:关于注释,问题是您是否需要类上的泛型。编译的内容(感谢Willie指出错误(将是:

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

最新更新