Scala'无法覆盖'错误

时间:2012-05-29 17:23:23

标签: java scala

我在Scala中为Hbase编写mapreduce作业时遇到了这个奇怪的问题。问题是我的scala类让我们说ScalaMapReducer必须扩展下面的类 http://hbase.apache.org/apidocs/org/apache/hadoop/hbase/mapreduce/TableMapper.html

但是当我这样做并“覆盖”map方法(继承表格超类MapMapper的Mapper)时,scala抱怨错误'map overrides nothing'并且无法编译,而我可以在Java中没有任何问题。< / p>

我找到了以下解决方法:

1)定义一个Dummy Java类,它扩展TableMapper类并使用一些空实现覆盖map。现在从scala扩展这个Dummy类。

2)我在goole上发现了这个 workaround 它定义了Mappers特征。

虽然我猜这可能与内部课程有关但我真的没有任何线索和解释。

这是一般的Scala问题

修改: 我的scala类中的示例代码

class ScalaMapReducer extends TableMapper[Text,IntWritable]
{
    override def map(row:ImmutableBytesWritable,result:Result,context:Context):Unit  =
    {
        //..some code
    }
}

2 个答案:

答案 0 :(得分:4)

错误地图覆盖任何内容几乎总是因为地图中的键,值类型不匹配而减少定义。双重检查,一些示例代码可能有助于更好的调试。

答案 1 :(得分:4)

根据提供的信息(即没有代码!),您最有可能发生的错误(并且已经制作了一个错误)是错误使用类型参数之一。例如,如果接口定义了一个方法:

public interface I<T> { public void doStuff(T t); }

也许你可能已经实现如下:

class I0 extends I[String] { override def doStuff[String](String s) }
                                               // ^^^^^^  ^^^^^^
                                               // oops, a type parameter

虽然我无法确定,因为您没有向我们展示代码。如果您使用IDE ,为什么不要求它填写空白实现? (使用IDEA,这是CTRL-i