在伴侣对象上定义val时,如下所示:
object Foo { val bar = 3 }
Scala生成静态最终方法:
$ scalac Foo.scala && javap Foo
public final class Foo {
public static int bar();
}
有没有办法让它生成静态字段而不是静态方法?
FWIW,我需要它,因为我有现有的编译Java代码,我需要保持二进制兼容性。
答案 0 :(得分:5)
目前无法在Scala中使用类似Java的静态字段,无论它们是否为final。请参阅此处的说明,例如:Why doesn't Scala have static members inside a class?。
这是Akka在Scala中不是100%写的原因之一:http://www.infoq.com/interviews/klang-akka
那么Akka写的是什么?
Akka不是百分之百的Scala,因为有些人会构建你 由于性能原因,无法在Scala中真正表达,所以静态 例如,当你需要做一些棘手的事情时 并发你需要有静态字段,所以我认为就像 百分之九十的Scala,然后我们有一些Java的东西,因为我们 必须。
您可以在Java端进行Java / Scala互操作,即在您的情况下创建某种适配器。
现有static fields
的实施方式,但目前尚不清楚我们何时会得到它:https://issues.scala-lang.org/browse/SI-4581。
我无法找到进行此导入编译的方法:import scala.annotation.static
。也许它不在我的Scala版本中或默认情况下被禁用。否则这就是答案:
object Foo { @static final val bar: Int = 3 }