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