在Kotlin中实现Hadoop Mapper或Reducer时,我从编译器中得到了一个有趣的矛盾 . 每当您使用 Context
对象时,如果您不提供类型参数( <KEYIN, VALUEIN, KEYOUT, VALUEOUT>
),编译器会给出错误说"4 type arguments expected",如果您提供类型参数,则说"No type arguments expected" . 有什么想法在这里发生了什么?
一个例子:
// 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
的内部类,因此当您指定要扩展的_2490904的类型时,不应该隐含_2490903的类型,就像在Java中一样吗?
1 回答
Kotlin期待"4 type arguments"
Mapper<KEYIN, VALUEIN, KEYOUT, VALUEOUT>
而不是Context
Mapper<KEYIN, VALUEIN, KEYOUT, VALUEOUT>.Context
.一个例子:
应该/可以隐含
Context
的类型参数 . 我建议在Kotlin YouTrack中创建一个问题 .