在Kotlin的泛型中扩展类

时间:2017-05-25 08:27:12

标签: kotlin

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

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

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

2 个答案:

答案 0 :(得分:5)

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

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

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

答案 1 :(得分:2)

enum class WithGraphicKind(val innerClass: Class<out WithGraphics>)

基本上等同于Java的

Class<? extends WithGraphics>