小编use*_*423的帖子

伴随对象中的方法在scala中编译成静态方法?

看起来scala将伴随对象中的方法编译为静态方法,这使得从java代码调用它们更容易一些.例如,您可以编写CompanionObject.method()而不是CompanionObject $ .MODULE $ .method().但是,有时看似无关的代码更改会破坏这种行为.我想出了这个例子来说明问题

$ cat TestCompanion.scala 
class TestCompanion

object TestCompanion {
  def init2 {}
}

@SerialVersionUID(1L)
class TestCompanion2

object TestCompanion2 {
  def init2 {}
}


$ scalac -version
Scala compiler version 2.9.0.1 -- Copyright 2002-2011, LAMP/EPFL

$ scalac TestCompanion.scala
$ javap TestCompanion
Compiled from "TestCompanion.scala"
public class TestCompanion extends java.lang.Object implements scala.ScalaObject{
    public static final void init2();
    public TestCompanion();
}

$ javap TestCompanion2
Compiled from "TestCompanion.scala"
public class TestCompanion2 extends java.lang.Object implements scala.ScalaObject{
    public static final long serialVersionUID; …
Run Code Online (Sandbox Code Playgroud)

scala

6
推荐指数
1
解决办法
1064
查看次数

避免在scala中继承方法

以下代码段

class A {
   def foo = "A.foo"
}

trait B {
   def foo = "B.foo"
   def bar = "B.bar"
}

val x = new A with B
Run Code Online (Sandbox Code Playgroud)

不编译,因为

error: overriding method foo in class A of type => java.lang.String;
method foo in trait B of type => java.lang.String needs `override' modifier
Run Code Online (Sandbox Code Playgroud)

但是,我的意图是定义x,以便:

x.foo => "A.foo"
x.bar => "B.par"
Run Code Online (Sandbox Code Playgroud)

也就是说,我只希望x从B继承bar,但不是foo.scala有没有办法实现这一目标?

inheritance scala

3
推荐指数
2
解决办法
349
查看次数

标签 统计

scala ×2

inheritance ×1