我试图将对象中存在的方法的访问权限限制为对象所属的包。 该方法由包内的许多类使用。我有两个选择:
protected[pkg] object MyObject{....}
或
private[pkg] object MyObject{....}
他们两个都很好。 我的问题是,既然对象不能被任何类/对象扩展,那么它们不是等价的吗?
答案 0 :(得分:2)
顶层,是的,它们最终以Java形式公开(不是默认访问)。
但是:
package accesstest {
trait T {
protected[accesstest] object Foo { def foo = 7 }
private[accesstest] object Bar { def bar = 8 }
}
object Test extends App {
val t = new T {}
Console println t.Foo.foo
Console println t.Bar.bar
Console println other.Other.foo
}
}
package other {
object Other extends accesstest.T {
def foo = Foo.foo
//def bar = Bar.bar // nope
}
}
所以重要的是封闭事物的可扩展性和访问权。