从Scala调用Java:受保护的构造函数

时间:2010-09-09 16:49:49

标签: scala constructor protected java-interop

这在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 个答案:

答案 0 :(得分:4)

这是一种错误,类似功能。你当然应该得到访问错误(功能),因为这是受保护的应该做的。然而,编译器应该足够了解上下文,以便能够分辨并警告您,而不是将其留给运行时(bug,或者至少是候选者,用于增强)。