Przepraszamy za chwytliwy tytuł. ;-)Mogę haz nie pakiet-prywatne klasy w Scala?
Chcę utworzyć klasę pakiet-prywatnego z metodą pakietu-prywatnego w Scala, więc moja klasa wygląda nieco jak poniżej:
package net.java.truevfs.ext.pace
import ...
private[pace] abstract class AspectController(controller: FsController)
extends FsDecoratingController(controller) {
private[pace] def apply[V](operation: => V): V
... // lots of other stuff
}
Jednakże, jeśli mogę użyć javap, by sprawdzić, co Scala kompilator skutecznie tworzy, mam coś takiego:
$ javap -classpath target/classes net.java.truevfs.ext.pace.AspectController
Compiled from "AspectController.scala"
public abstract class net.java.truevfs.ext.pace.AspectController extends net.java.truevfs.kernel.spec.FsDecoratingController implements scala.ScalaObject{
public abstract java.lang.Object apply(scala.Function0);
...
}
oznacza to, że choć kompilator Scala może respektować ograniczenia dostępu, mogę jeszcze nazwać tę klasę z dowolnego kodu Java, które jest oczywiste naruszenie hermetyzacji.
Czy brakuje mi czegoś? Czy istnieje sposób, aby działało to zgodnie z przeznaczeniem?
+1 dla śmiesznym tytule –