2011-09-14 75 views
4

我一直在玩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类型,斯卡拉似乎不喜欢。

我曾尝试以下,却得到了不同的错误:

jobConf.setMapRunnerClass(classOf[ClosureMapper]); 

那人给class ClosureMapper takes type parameters

如何让斯卡拉识别原始类型约束任何想法?

回答

0

您可能需要指定开往ClosureMapper类型参数:

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

这似乎并没有做到这一点。首先,ClosureMapper的4个类型参数被限制为Writable,而不是ClosureMapper。其次,即使我指定classOf [ClosureMapper [可写,可写,可写,可写]],它不起作用,因为由于某种原因它不能推断(完全指定的)ClosureMapper类不是一个* raw * MapRunnable。 –

相关问题