在Kotlin中实现Hadoop Mapper或Reducer时,我从编译器中得到了一个有趣的矛盾。每次使用Context
对象时,编译器都会给出一个错误,说明&#34; 4类型参数预期&#34;如果你不提供类型参数(<KEYIN, VALUEIN, KEYOUT, VALUEOUT>
),并说&#34;没有期望的类型参数&#34;如果你提供类型参数。任何想法在这里发生了什么?
一个例子:
// 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 :(得分:3)
Kotlin期待Mapper<KEYIN, VALUEIN, KEYOUT, VALUEOUT>
上的“4种类型参数”而不是Context
中的Mapper<KEYIN, VALUEIN, KEYOUT, VALUEOUT>.Context
。
一个例子:
override fun setup(context: Mappert<KeyIn, ValueIn, KeyOut, ValueOut>.Context?) {
super.setup(context)
}
可能/可能隐含Context
的类型参数。我建议在Kotlin YouTrack中创建一个问题。