キャッチーなタイトルでごめんなさい。;-)
Scalaでpackage-privateメソッドを使用してpackage-privateクラスを作成したいので、私のクラスは次のようになります。
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コードから呼び出すことができることを意味します。これは、明らかにカプセル化違反です。
私は何かが足りないのですか?これを意図したとおりに機能させる方法はありますか?