如何解决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语法糖。
编辑: 关于注释,问题是您是否需要该类的泛型。编译的内容(由于威利指出了错误)将是:
class Output
class DocumentAggregator(
private val mongoTemplate: Any?
) {
inline fun <S,reified T: Output>aggregate(document: S): T? {
return null
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。