微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Kotlin不允许将T :: class.java作为赋予Java方法的参数化类类型

如何解决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 举报,一经查实,本站将立刻删除。