У меня есть класс Java, который я портировал в Scala, но у которого все еще есть некоторые подклассы 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. Но
protected[packagename] def getFoo()
по-прежнему не генерирует защищенный метод pukka (Java), хотя я думаю, что видимость должна быть одинаковой.
Есть ли способ убедить компилятор Scala создать метод, который Java будет считать защищенным?