Xin lỗi vì tiêu đề hấp dẫn. ;-)Tôi có thể không có lớp học riêng tư ở Scala?
Tôi muốn tạo ra một lớp gói tin với một phương pháp gói tin trong Scala, vì vậy lớp học của tôi trông hơi như thế này:
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
}
Tuy nhiên, nếu tôi sử dụng javap để kiểm tra những gì Scala biên dịch một cách hiệu quả tạo ra, tôi nhận được một cái gì đó như thế này:
$ 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);
...
}
điều này có nghĩa rằng mặc dù các trình biên dịch Scala có thể tôn trọng hạn chế truy cập, tôi vẫn có thể gọi lớp này từ bất kỳ mã Java, đó là một sự vi phạm đóng gói rõ ràng.
Tôi có thiếu gì đó không? Có cách nào để thực hiện công việc này như dự định không?
+1 cho tiêu đề hài hước –