小编ide*_*ird的帖子

使用traits增强java类,如何在java字段内部声明trait?

我的目标是使用特征混合来增强现有Java类的内部scala代码.例如,将java.awt.Rectangle.translate(dx,dy)等方法添加到java.awt.geom.Ellipse2D类中.为此,我创建了以下特征:

trait RectangleLike {
  var x: Double  // abstract vals to correspond to java class fields
  var y: Double  //   I need these vars to refer to them inside translate method
  def translate(dx: Double, dy: Double) {
    x = x + dx
    y = y + dy
  }
  // more concrete trait methods here
} // defines without errors in scala REPL 
Run Code Online (Sandbox Code Playgroud)

然后在构造Ellipse时使用trait:

val egg = new java.awt.geom.Ellipse2D.Double(5, 10, 20, 30) with RectangleLike
Run Code Online (Sandbox Code Playgroud)

但是当我在scala REPL中执行上面的脚本时,我得到以下输出:

<console>:8: error: overriding variable x …
Run Code Online (Sandbox Code Playgroud)

scala traits

10
推荐指数
1
解决办法
1382
查看次数

标签 统计

scala ×1

traits ×1