2011-09-14 7 views
4

私はScala IDEで2.9.1でコンパイルするSMRを取得しようとしています。 SMRは2008年以来ずっと変わっていないようだが、未解決のコンパイルエラーがたくさんある。私が上で立ち往生しています一つは、この行です:生の型制約を持つ基本型を参照してください

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のは生の型で、Scalaはそれほど感謝しません。

私は、次を試してみましたが、別のエラーを持っている:

jobConf.setMapRunnerClass(classOf[ClosureMapper]); 

1はclass ClosureMapper takes type parameters

にScalaは、生型の制約を認識するために取得する方法上の任意のアイデアを与えることを?

答えて

0

あなたはClosureMapperの型パラメータのためのバウンドを指定する必要があります

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

これはそれを行うにはいないようです。 ClosureMapperの4つの型引数は、ClosureMapperではなくWritableに制限されています。第2に、classOf [ClosureMapper [Writable、Writable、Writable、Writable]]を指定しても何らかの理由でClosureMapperクラスがraw * MapRunnableではないことを推測できないため動作しません。 –

関連する問題