gpt4 book ai didi

scala - 如何强制 scalac 生成静态最终字段?

转载 作者:行者123 更新时间:2023-12-02 09:30:32 26 4
gpt4 key购买 nike

在像这样的伴生对象上定义 val 时:

object Foo { val bar = 3 }

Scala 生成静态 final方法:

$ scalac Foo.scala && javap Foo
public final class Foo {
public static int bar();
}

有没有办法让它生成静态字段而不是静态方法?

FWIW,我需要它,因为我已经编译了现有的 Java 代码,并且需要保留二进制兼容性。

最佳答案

目前在 Scala 中没有办法拥有类似 Java 的静态字段,无论它们是否是 Final 的。请参阅此处的说明,例如:Why doesn't Scala have static members inside a class? .

这就是 Akka 没有 100% 用 Scala 编写的原因之一:http://www.infoq.com/interviews/klang-akka

So what is Akka write in it?

Akka is not one hundred percent Scala because some constructs you can’t really express in Scala for performance reasons, so static fields for example, so when you need to do some tricky stuff with concurrency you need to have static fields, so I think it’s like ninety percent Scala and then we have some Java stuff just because we have to.

您可以在 Java 端进行 Java/Scala 互操作,即根据您的情况创建某种适配器。

已有针对静态字段的实现,但尚不清楚我们何时能得到它: https://issues.scala-lang.org/browse/SI-4581 .

我找不到编译此导入的方法:import scala.annotation.static。也许它不在我的 Scala 版本中或者默认情况下被禁用。否则这将是答案:

object Foo { @static final val bar: Int = 3 }

关于scala - 如何强制 scalac 生成静态最终字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33726898/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com