Scala 中的默认公共访问

2022-09-03 09:38:19

我读到scala中没有包私有(Java中的默认值),并且默认情况下使用公共访问。

这种选择的理由是什么?这是一种很好的做法,因为默认的公共访问使所有内容都可见,因此是API的一部分?

这意味着需要额外的键入来封装字段和方法(无论是私有的、作用域内的私有的、受保护的、访问)。


答案 1

在Java中,选择“包私有”作为默认值要容易得多,因为它是那里仅有的三种可能性之一。

在 Scala 中,您可以选择公共访问 ()、带继承的包私有访问 ()、不带继承的包私有访问 ()、类私有访问 ()、对象私有访问 ()、继承访问 ()、访问(您可以怎么称呼它),此外,您还有某种文件私有访问修饰符 ()。publicprotected[C]private[C]privateprivate[this]protectedprotected[this]sealed

很难从中选择除 以外的默认值。public

(考虑到内部方法,还可以将方法私有添加到列表中...)


答案 2

Scala在选择某些东西的可见性方面比Java更灵活,尽管一些与嵌套类相关的Java可见性规则无法转换为Scala。

而且,是的,Scala中有包私有。它写得像在Scala中一样。private[package]

Scala之所以成为默认值,是因为它是最常用的可见性。“额外键入”实际上是较少键入,因为将成员设为私有或受保护要少得多。public

Java中该规则的一个例外是字段,这些字段应设为私有,以便可以在不破坏客户端的情况下更改实现的详细信息。这样做的一个实际结果是具有字段的类,然后是每个字段的 getter 和 setter。

在 Scala 中,因为可以用相应的 替换 a 或 a,所以不需要这样做。valvardef


推荐