classOf[TextOutputFormat] 在 Scala 中需要参数,但在 Java 中工作正常,没有任何参数 (TextOutputFormat.class)

classOf[TextOutputFormat] requires parameters in Scala but works fine in Java without any parameters (TextOutputFormat.class)

在 Java 中编写简单的 Map Reduce 程序时,下面的行工作正常。

job.setOutputFormatClass(TextOutputFormat.class)    

但 Scala 中同样需要参数。

job.setOutputFormatClass(classOf[TextOutputFormat[<param>, <param>]]) 

为什么它的行为不同? 有什么我想念的吗?

在Java中,TextOutputFormat.class是特殊语法。在 Scala 中,就语法而言,classOf[...] 只是一个通用方法调用(当然,编译器会对其进行特殊处理)。所以类型参数需要是一个类型,而 TextOutputFormat 本身不是一个类型(在 Java 中它是,称为原始类型,但它不是你通常应该使用的东西;Scala 不'支持原始类型)。写入 classOf[TextOutputFormat[_, _]].