2017-05-25 129 views
2

我想实现这个枚举简单的构造如下:扩展类科特林的泛型

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

回答

5

需要申报现场方差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>