【问题标题】:Extending Classes in Kotlin's Generics在 Kotlin 的泛型中扩展类
【发布时间】:2017-05-25 08:27:11
【问题描述】:

我正在尝试使用简单的构造函数来实现这个枚举,如下所示:

enum class WithGraphicKind(val innerClass: Class<*>) {
    CONTACT(Contact::class.java), SALE(Sale::class.java);
}

由于ContactSale 类都实现了一个公共接口WithGraphics,我想将构造函数键入为innerClass: Class&lt;WithGraphics&gt;,但这不起作用。我也尝试了Class&lt;* : WithGraphics&gt; 和类似的其他人,但没有任何效果。我在这里的官方文档中也找不到任何提示:https://kotlinlang.org/docs/reference/generics.html

【问题讨论】:

    标签: kotlin


    【解决方案1】:

    您需要声明站点差异Kotlin Generics: Declaration-site variance

    如果您告诉编译器您将只使用 WithGraphics,则编译器允许 WithGraphics 的任何子类型

    enum class WithGraphicKind(val innerClass: Class<out WithGraphics>) {
        CONTACT(Contact::class.java), SALE(Sale::class.java);
    }
    

    【讨论】:

      【解决方案2】:
      enum class WithGraphicKind(val innerClass: Class<out WithGraphics>)
      

      基本上相当于Java的

      Class<? extends WithGraphics>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-12-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多