如何从 Scala 访问 Java 类中的公共静态最终成员?

nyl*_*Dev 3 java scala

我一直在尝试运行以下 Scala 代码:

import javax.swing.JFrame

class ScalaClass(title: String) extends JFrame(title: String) {
  setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)
  // ...
}

object Main {
  def main(args: Array[String]) : Unit = {
    var sFrame : JFrame = new ScalaClass("Hi");
  }
}
Run Code Online (Sandbox Code Playgroud)

JFrame.EXIT_ON_CLOSE应等于3. 但是,当我尝试在 IntelliJ IDEA 中构建和运行时,我收到此错误:

Error:(4, 35) value EXIT_ON_CLOSE is not a member of object javax.swing.JFrame setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)

添加import javax.swing.JFrame.EXIT_ON_CLOSE也不起作用。

有谁知道我做错了什么?

Ale*_*nov 5

您需要使用它实际定义的位置, javax.swing.WindowConstants. 当 Java 编译器发现JFrame.EXIT_ON_CLOSE它被重写为WindowConstants.EXIT_ON_CLOSE; Scala 编译器不会这样做(Kotlin 也不会)。

它曾经在 Java 9 中声明过,JFrame在 Java 9 中被删除;这是 Java 的源代码和二进制兼容的更改,如链接中所述,但与 Scala/Kotlin 不兼容。