![](/img/trans.png)
[英]Why we write NextActivity::class.java although this is a kotlin class?
[英]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.