请参阅具有原始类型约束的基本类型

时间:2011-09-14 05:03:52

标签: generics scala hadoop mapreduce type-inference

我一直在玩Scala,尝试使用2.9.1在Scala IDE中编译SMR。自2008年以来,SMR似乎没有受到影响,并且存在许多未解决的编译错误。我坚持的是这一行:

jobConf.setMapRunnerClass(classOf[ClosureMapper[_,_,_,_]]);

因此定义了ClosureMapper:

class ClosureMapper[K1,V1,K2,V2] extends MapRunnable[Writable,Writable,Writable,Writable] { 
  ...
}

我得到的错误是:

type mismatch; 
found : java.lang.Class[smr.hadoop.ClosureMapper[_, _, _, _]](classOf[smr.hadoop.ClosureMapper]) 
required: java.lang.Class[_ <: org.apache.hadoop.mapred.MapRunnable]

所以在我看来,JobConf类的setMapRunnerClass方法正在限制类型参数继承MapRunnable(ClosureMapper所做的),但更具体地说是MapRunnable的 raw 类型,Scala似乎没有升值。

我尝试过以下操作,但出现了不同的错误:

jobConf.setMapRunnerClass(classOf[ClosureMapper]);

那个人提供class ClosureMapper takes type parameters

关于如何让Scala识别原始类型约束的任何想法?

1 个答案:

答案 0 :(得分:0)

您可能必须为ClosureMapper

的类型参数指定范围
jobConf.setMapRunnerClass(classOf[ClosureMapper[_ <: ClosureMapper[_],_ <: ClosureMapper[_],_ <: ClosureMapper[_],_ <: ClosureMapper[_]]]);