【问题标题】:Calling a protected static Java method from Scala从 Scala 调用受保护的静态 Java 方法
【发布时间】:2011-05-25 15:24:15
【问题描述】:

我这里有一个包含一些 Java 类的库。一个类有一些protected static 方法,我意识到这是一种OOP 禁忌,但我不能更改它的代码。假设我有一个继承上述 Java 类的 Scala 类,我该如何调用它的受保护静态成员?

【问题讨论】:

  • 创建一个调用超类方法的Java子类不是一个选项吗?然后,您可以让 Scala 访问您的 Java 类。
  • 啊,是的,我想我可以走那条路。谢谢。似乎有点奇怪,但不能直接使用!
  • 也许在 Scala 中更直接,我不知道。这就是为什么我将其发布为评论而不是答案。显然,“超级”调用无法工作,因为 Scala 没有静态继承。也许您可以创建一个扩展相关类的 Scala 对象,然后调用“LibraryClassName.staticMethodName(...)”,从而避免使用“super”?我不确定这是否可行。

标签: scala scala-java-interop


【解决方案1】:

Frequently Asked Questions - Java Interoperability

这是 Scala 的一个已知限制: 没有“静态”成员的概念 在斯卡拉。相反,Scala 对待 Y类的静态成员作为成员 单例对象 Y ( Y 类的伴生对象)。什么时候 从这个类继承,可以 仅访问受保护的类成员 Y 但不能访问受保护的成员 对象 Y。

Scala 无法模拟 静电保护而不损害 Scala 对象模型的完整性 基本方式,所以这不会发生 改变。要解决此问题 限制,必须创建一个 封闭类的实现 用Java代码封装所有 访问受保护的静态内部 类。

请参阅ticket #1806 了解更多信息 信息和具体例子 限制及其解决方法

【讨论】:

  • “经常”问的问题很少被问到,很少有人注意到它的存在。 :-)
  • JFYI,这是在 2.10.0-M2 中修复的
  • @OlegYch:将其添加为答案?
猜你喜欢
  • 2018-06-29
  • 2014-12-19
  • 1970-01-01
  • 2013-10-02
  • 1970-01-01
  • 2015-02-16
  • 2013-05-30
  • 1970-01-01
  • 2020-08-02
相关资源
最近更新 更多