首页 文章

Kotlin中的Hadoop Context类型参数

提问于
浏览
4

在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 会使其编译,但由于 ContextMapper 的内部类,因此当您指定要扩展的_2490904的类型时,不应该隐含_2490903的类型,就像在Java中一样吗?

1 回答

  • 3

    Kotlin期待"4 type arguments" Mapper<KEYIN, VALUEIN, KEYOUT, VALUEOUT> 而不是 Context Mapper<KEYIN, VALUEIN, KEYOUT, VALUEOUT>.Context .

    一个例子:

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

    应该/可以隐含 Context 的类型参数 . 我建议在Kotlin YouTrack中创建一个问题 .

相关问题