Извините за запоминающийся заголовок.; -)
Я хочу создать класс private-private с методом private-package в Scala, поэтому мой класс выглядит примерно так:
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
}
Однако, если я использую javap для проверки того, что эффективно создает компилятор Scala, я получаю что-то вроде этого:
$ 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);
...
}
Это означает, что хотя компилятор Scala может уважать ограничения доступа, я все равно мог бы вызвать этот класс из любого Java-кода, что является явным нарушением инкапсуляции.
Я что-то упустил? Есть ли способ сделать эту работу по назначению?