java - 从 Java 泛型类继承的 Scala 类

标签 java scala inheritance

我正在尝试用 Scala 编写一个 Hadoop 映射器类。作为起点,我从“Hadoop:权威指南”一书中获取了一个 Java 示例,并尝试将其移植到 Scala。

原始 Java 类扩展 org.apache.hadoop.mapreduce.Mapper:

public class MaxTemperatureMapper
    extends Mapper<LongWritable, Text, Text, IntWritable>

并覆盖方法

public void map(LongWritable key, Text value, Context context)
    throws IOException, InterruptedException

此方法被调用并正常工作(我使用单元测试进行测试,然后使用 yarn 运行它)。

我对 Scala 端口的尝试是:

class MaxTemperatureMapperS extends Mapper[LongWritable, Text, Text, IntWritable]

然后是方法

@throws(classOf[IOException])
@throws(classOf[InterruptedException])
override def map(key: LongWritable, value: Text, context: Context): Unit = 
{
    ...
}

但是 Scala 编译器报错:

error: method map overrides nothing.

所以我认为这两种方法在 Scala 和 Java 中具有相同的签名,但显然我遗漏了一些东西。你能给我一些提示吗?

最佳答案

有时最好的方法是让您的 IDE 为您工作:

class Test extends Mapper[LongWritable, Text, Text, IntWritable] {
  override def map(key: LongWritable, value: Text, context: Mapper[LongWritable, Text, Text, IntWritable]#Context): Unit = ???
}

在这种情况下,问题是类 Context 的定义“存在于”类 Mapper 中,因此您需要使用 # 语法

关于java - 从 Java 泛型类继承的 Scala 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48692230/

相关文章:

objective-c - 如何从其父类(super class)的实例分配 NSObject 子类实例?

java - 是否可以在父类(super class)对象上调用子类的方法?

java - 使用 StyleConstants.Bold 时 AttributeSet 抛出错误

java - 是否可以使用 JUnit 监视已处理的异常?

java - ListField 选定行打破其他行的高度

scala - Scala 中具有默认值的通用类型解析

java - Apache Spark - foreach Vs foreachPartition 什么时候使用?

java - Swing Scala 问题 - 面板 100% 扩展

c++ - 来自指向派生类的指针的 `static_cast<Base*>(static_cast<void*>(derived))` 何时有效?

java - 导入到 Eclipse 时,Maven 生成的项目看起来有所不同