从Scala调用受保护的静态Java方法

J C*_*per 6 scala scala-java-interop

我这里有一个带有一些Java类的库.一个类有一些protected static方法,我意识到这是一个OOP禁止 - 但我不能改变它的代码.假设我有一个Scala类,它是上述Java类的子类,我该如何调用其受保护的静态成员?

Vas*_*iuk 20

请参阅常见问题 - Java互操作性:

这是Scala的一个已知限制:Scala中没有"静态"成员的概念.相反,Scala将类Y的静态成员视为单例对象Y(类Y的伴随对象)的成员.从该类继承时,只能访问Y类的受保护成员,但无法访问对象Y的受保护成员.

Scala无法模拟静态保护而不会从根本上损害Scala对象模型的完整性,因此这不会改变.要解决此限制,必须使用Java代码创建封闭类的实现,该代码封装对受保护的静态内部类的所有访问.

有关更多信息和限制及其解决方法的具体示例,请参见#1806票证.

  • JFYI,固定在2.10.0-M2 (6认同)
  • "经常"提出的问题很少被问及很少有人注意到它的存在.:-) (3认同)