【发布时间】:2011-12-27 23:44:43
【问题描述】:
我有一个已移植到 Scala 的 Java 类,但它仍然有一些 Java 子类实现抽象功能。
原来的 Java 有
public abstract class Base {
...
protected abstract Foo getFoo();
}
被扩展了
public class Fred extends Base {
...
protected Foo getFoo() {
return foo;
}
}
现在当我将 Base 移植到 Scala 时
class Base {
...
protected def getFoo(): Foo
}
编译器抱怨说
不能降低继承方法的可见性...
现在我明白了,因为它的规则略有不同,Scala 倾向于在编译器而不是字节码中强制可见性,因此 getFoo 在 javap'd 类中被标记为 public。但是
protected[packagename] def getFoo()
仍然不会生成 pukka (Java) 保护方法,尽管我认为可见性应该是相同的。
有什么方法可以说服 Scala 编译器发出 Java 认为受保护的方法?
【问题讨论】:
-
我会接受权威的“不”
-
很好的问题。在到达此页面之前,我遵循了完全相同的路径。
标签: scala visibility protected