Обратитесь к базовым типам, которые имеют ограничение необработанного типа - PullRequest
4 голосов
/ 14 сентября 2011

Я играл со Scala, пытаясь заставить SMR скомпилировать в Scala IDE с 2.9.1. 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]

Так что мне кажется, что метод setMapRunnerClass класса JobConf ограничивает параметр типа для наследования от MapRunnable (что делает ClosureMapper), но, в частности, от типа MapRunnable raw , который, похоже, не оценивает Scala .

Я пробовал следующее, но получил другую ошибку:

jobConf.setMapRunnerClass(classOf[ClosureMapper]);

Тот, который дает class ClosureMapper takes type parameters

Есть какие-нибудь идеи о том, как заставить Scala распознавать ограничение необработанного типа?

1 Ответ

0 голосов
/ 14 сентября 2011

Возможно, вам придется указать границу для параметров типа ClosureMapper:

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