2016-02-18 63 views
4

在Kotlin中實現Hadoop Mapper或Reducer時,我從編譯器中得到一個有趣的矛盾。無論何時使用Context對象,如果您不提供類型參數(<KEYIN, VALUEIN, KEYOUT, VALUEOUT>),並且如果您提供類型參數時顯示「沒有期望的類型參數」,則編譯器會提供一個錯誤,指出「期望4種類型參數」。任何想法發生了什麼?Kotlin中的Hadoop上下文類型參數

一個例子:

// gives "4 type arguments expected" 
override fun setup(context: Context?) { 
    super.setup(context) 
} 

// gives "No type arguments expected" 
override fun setup(context: Context<KeyIn, ValueIn, KeyOut, ValueOut>?) { 
    super.setup(context) 
} 

指定Mapper<KeyIn, ValueIn, KeyOut, ValueOut>.Context使得它編譯,但由於Context是一個內部類的Mapper,不應該Context的類型,當您指定的Mapper你的類型暗示」重新擴展,就像在Java中一樣?

+0

對於那些有興趣的人來說,Kotlin似乎並沒有在內部類中捕獲任何泛型。我在YouTrack上發佈了一張已分配的票:https://youtrack.jetbrains.com/issue/KT-11123,並且在內部類的問題中有泛型的父票:https://youtrack.jetbrains.com/問題/ KT-9208 – alhart

回答

3

Kotlin期待Mapper<KEYIN, VALUEIN, KEYOUT, VALUEOUT>的「4類型參數」,而不是ContextMapper<KEYIN, VALUEIN, KEYOUT, VALUEOUT>.Context

一個例子:

override fun setup(context: Mappert<KeyIn, ValueIn, KeyOut, ValueOut>.Context?) { 
    super.setup(context) 
} 

可能的是,對於Context類型參數應/可暗示。我建議在Kotlin YouTrack中創建一個問題。