【发布时间】:2012-10-09 09:28:48
【问题描述】:
对不起,这个吸引人的标题。 ;-)
我想在 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 代码调用这个类,这显然违反了封装。
我错过了什么吗? 有没有办法让这项工作按预期进行?
【问题讨论】:
标签: scala