Kotlin中的Hadoop上下文类型参数
在Kotlin中实现Hadoop Mapper或Reducer时,我从编译器中得到一个有趣的矛盾。 任何时候使用Context
对象,如果你不提供类型参数( <KEYIN, VALUEIN, KEYOUT, VALUEOUT>
),并且说“没有类型参数”,编译器会给出一个错误, DO提供类型参数。 任何想法发生了什么?
一个例子:
// 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
的内部类,因此当指定要扩展的Mapper
的类型时,不应该隐含Context
的类型,像在Java中一样?
Kotlin期望Mapper<KEYIN, VALUEIN, KEYOUT, VALUEOUT>
上的“4类型参数” Mapper<KEYIN, VALUEIN, KEYOUT, VALUEOUT>
而不是Mapper<KEYIN, VALUEIN, KEYOUT, VALUEOUT>.Context
的Context
Mapper<KEYIN, VALUEIN, KEYOUT, VALUEOUT>.Context
。
一个例子:
override fun setup(context: Mappert<KeyIn, ValueIn, KeyOut, ValueOut>.Context?) { super.setup(context) }
Context
的类型参数应该/可以被暗示。 我建议在Kotlin YouTrack中创建一个问题。