Tengo una clase de Java que he transferido a Scala, pero que todavía tiene algunas subclases de Java que implementan la funcionalidad abstracta.¿Puedo crear un método con acceso protegido de Java en Scala?
El Java original tenía
public abstract class Base {
...
protected abstract Foo getFoo();
}
que se extendió
public class Fred extends Base {
...
protected Foo getFoo() {
return foo;
}
}
Ahora, cuando el puerto base de Scala
class Base {
...
protected def getFoo(): Foo
}
El compilador se queja de que
no pueden reducir la visibilidad del método heredado ...
Ahora entiendo que debido a sus reglas son sutilmente diferentes, Scala tiende a reforzar la visibilidad en el compilador en vez del código de bytes, por lo que es getFoo marcado público en la clase javap'd. Pero
protected[packagename] def getFoo()
todavía no genera un pukka (Java) método protegido, aunque creo que la visibilidad debe ser el mismo.
¿Hay alguna manera de persuadir al compilador de Scala de que emita un método que Java considerará protegido?
Acepto un 'No' autorizado –
Excelente pregunta. Seguí exactamente el mismo camino antes de llegar a esta página. – ebruchez