Как получить доступ к окончательному члену publi c stati c в классе Java из Scala? - PullRequest
2 голосов
/ 28 января 2020

Я пытался запустить следующий фрагмент кода 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");
  }
}

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 тоже не работает.

Кто-нибудь знает что я делаю не так?

1 Ответ

4 голосов
/ 28 января 2020

Вам нужно использовать место, в котором оно на самом деле определено, javax.swing.WindowConstants. Когда компилятор Java видит JFrame.EXIT_ON_CLOSE, он переписывается в WindowConstants.EXIT_ON_CLOSE; компилятор Scala этого не делает (как и Kotlin).

Он был объявлен в JFrame, но был удален в Java 9 ; это совместимое с исходным кодом и двоичным кодом изменение для Java, как описано в ссылке, но не совместимое с исходным кодом для Scala / Kotlin.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...