用scala类实现java接口 - 类型问题

pai*_*can 6 scala

为什么这个不编译?Scala 2.8.0RC3:

Java的

public interface X {
    void logClick(long ts, int cId, String s, double c);
}
Run Code Online (Sandbox Code Playgroud)

斯卡拉

class Y extends X {
  def logClick(ts: Long, cId: Int,sid: java.lang.String,c: Double) : Unit = {
  ...
  }
}
Run Code Online (Sandbox Code Playgroud)

错误

class Y needs to be abstract, since method logClick in trait X of type
(ts: Long,cId: Int,s: java.lang.String,c: Double)Unit is not defined
Run Code Online (Sandbox Code Playgroud)

mis*_*tor 2

您需要在inoverride的定义之前添加。logClickclass Y

class Y extends X {
  override def logClick(ts: Long, cId: Int,sid: java.lang.String,c: Double) : Unit = {
  ...
  }
}
Run Code Online (Sandbox Code Playgroud)


编辑:

由于丹尼尔下面说的原因,你甚至不需要override在方法之前添加。你的代码是正确的。

  • 似乎由于 java.lang.Double 的导入而存在别名问题。哎呀 (5认同)
  • 当被重写的方法是抽象的时,你实际上并不需要“重写”。 (3认同)