2017-05-25 166 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>