对不起,引人入胜的标题。 ;-)我可以在斯卡拉没有包私人类吗?
我想创建一个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代码,这是一个明确的封装冲突。
我错过了什么吗? 有没有一种方法可以按预期做到这一点?
+1的搞笑标题 –