Ho una classe Java che ho portato su Scala, ma che ha ancora alcune sottoclassi Java che implementano funzionalità astratte.Posso creare un metodo con accesso protetto Java in Scala?
L'originale Java aveva
public abstract class Base {
...
protected abstract Foo getFoo();
}
che è stato esteso
public class Fred extends Base {
...
protected Foo getFoo() {
return foo;
}
}
Ora, quando ho Base porta a Scala
class Base {
...
protected def getFoo(): Foo
}
Il compilatore si lamenta che
non può ridurre la visibilità del metodo ereditato ...
Ora capisco che perché le sue regole sono leggermente diverse, Scala tende a far rispettare la visibilità nel compilatore, piuttosto che il bytecode, in modo che sia getFoo segnalato pubblico nella classe javap'd. Ma
protected[packagename] def getFoo()
ancora non genera un pukka (Java) metodo protetto, anche se penso che la visibilità dovrebbe essere lo stesso.
C'è un modo per convincere il compilatore di Scala ad emettere un metodo che Java considererà protetto?
Accetterò un autorevole 'No' –
Ottima domanda. Ho seguito lo stesso identico percorso prima di raggiungere questa pagina. – ebruchez