8

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

4

1 回答 1

21

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

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

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

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

于 2010-12-15T08:35:04.080 回答