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

从Scala调用受保护的静态Java方法,scala,scala-java-interop,Scala,Scala Java Interop,我这里有一个包含一些Java类的库。有一个类有一些受保护的静态方法,我意识到这是一种OOP不,但我不能更改它的代码。假设我有一个Scala类,它是前面提到的Java类的子类,那么如何调用它的受保护静态成员呢?请参见: 这是Scala的已知限制: 没有“静态”成员的概念 在斯卡拉。相反,Scala会 类Y的静态成员作为成员 单个对象Y的 类的伴随对象)。什么时候 从这个类继承,可以 仅访问类的受保护成员 Y,但无法访问受保护的成员 对象Y的 Scala无法模拟 防静电保护,不会损坏电源 Scala

我这里有一个包含一些Java类的库。有一个类有一些受保护的静态方法,我意识到这是一种OOP不,但我不能更改它的代码。假设我有一个Scala类,它是前面提到的Java类的子类,那么如何调用它的受保护静态成员呢?

请参见

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

Scala无法模拟 防静电保护,不会损坏电源 Scala对象模型的完整性 基本方法,所以这是不可能的 改变。来解决这个问题 限制,必须创建一个 封闭类的实现 用Java代码封装所有 访问受保护的静态内部 班级

查看更多信息 信息和一个具体的例子 限制及其解决方法


这难道不是一个选项来创建一个调用超类方法的Java子类吗?然后你可以让你的Java类可以被Scala访问。啊,是的,我想我可以走这条路。谢谢看起来有点奇怪,但这不可能直接实现!我不知道,在Scala可能更直接。这就是为什么我把这篇文章作为评论而不是回答。显然,“超级”调用无法工作,因为Scala没有静态继承。也许您可以创建一个Scala对象来扩展所讨论的类,然后调用“LibraryClassName.staticMethodName(…)”,从而避免使用“super”?我不确定这是否有效。这些“常见”问题很少被问到,以至于很少有人注意到它的存在。:-)JFYI,这在2.10.0中是固定的-M2@OlegYch:加上这个作为答案?