Вызов Java из Scala: защищенный конструктор

Это компилируется без ошибок на Scala 2.8.0 final:

import javax.swing.tree.TreePath

object A extends Application {

  val path1 = new TreePath()
  val path2 = new TreePath(path1, "foo")

}

Однако по исполнению я получаю:

java.lang.IllegalAccessError: tried to access method javax.swing.tree.TreePath.<init>()V from class A$
  at A$.<init>(A.scala:5)
  at A$.<clinit>(A.scala)
 at A.main(A.scala)

Это ошибка, функция или известное ограничение?

1 ответ

Это своего рода ошибка, особенность. Вы, безусловно, должны получить ошибку доступа (функция), потому что именно это и должно делать защищенное. Однако компилятору, возможно, следует знать достаточно о контексте, чтобы иметь возможность рассказать об этом, и предупредить вас, вместо того, чтобы оставить его во время выполнения (ошибка или, по крайней мере, кандидат на усовершенствование).

Другие вопросы по тегам