参考具有原始类型约束的基类型



我一直在尝试Scala,试图让SMR在2.9.1的Scala IDE中编译。自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识别原始类型约束有什么想法吗?

您可能必须为ClosureMapper的类型参数指定一个界限:

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

相关内容

  • 没有找到相关文章