首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将Java generec重写为Kotlin?

如何将Java generec重写为Kotlin?
EN

Stack Overflow用户
提问于 2022-08-22 01:12:43
回答 1查看 42关注 0票数 2

我有java类,我需要用kotlin重写它。但我不能在里面重写仿制药。

Java类:

代码语言:javascript
复制
public abstract class AbstractFlagFilterFactory<T extends FlagFilter> extends FilterFactory {

    abstract Class<T> getFilterFlagType();

    abstract void processFlag(org.jooq.SelectQuery<?> query, T flag);
}

我的科特林班

代码语言:javascript
复制
abstract class AbstractFlagFilterFactory<out FlagFilter> : FilterFactory {

   abstract fun getFilterFlagType(): Class<out ru.vtblife.realtyobject.domain.filters.FlagFilter>

   abstract fun processSetFlag(
        query: org.jooq.SelectQuery<...(1)>,
        flag: Class<out ru.vtblife.realtyobject.domain.filters.FlagFilter>
    )
}

签署(1)我用我的意见标记了我的问题领域。但也许问题出在别的地方。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-08-22 01:58:54

Kotlin的<out FlagFilter>并不等同于<T extends FlagFilter>。在泛型声明站点上使用out可以使类型协变量。这被称为声明站点差异,这是一个甚至在Java中都不支持的特性。

这里您想要的特性是通用的上限。与Java的<T extends FlagFilter>等价的是<T: FlagFilter>。这使得FlagFilter成为T.

这令人困惑的原因是,Java重载了extends单词的方差和上界,其意义取决于上下文。如果您看到一个? extends? super,它分别是协方差或逆方差。否则,extends为上界。Java文档也没有帮助避免使用“方差”这个词,而是将协方差称为“上界通配符”和反方差“下界通配符”。

在您的函数中,您应该在Kotlin中使用<*>作为<?>在Java中的等价物。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73439345

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档