scala中的默认公共访问

bsr*_*bsr 14 java scala

我读到scala中没有package-private(默认为Java),默认情况下使用公共访问.

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

这意味着要封装字段和方法的额外输入(无论是私有,作用域私有,受保护,访问).

Deb*_*ski 27

在Java中,选择"package-private"作为默认设置要容易得多,因为它只有三种可能性中的一种.

在Scala中,您可以选择公共访问(public),包含私有访问和继承(protected[C]),包 - 私有访问,无继承(private[C]),类 - 私有访问(private),对象 - 私有访问(private[this]),继承访问(protected),protected[this]访问(无论你怎么称呼它,另外,你有一些文件私有访问修饰符(sealed).

除了之外,很难从中选择默认值public.

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


Dan*_*ral 5

尽管与嵌套类相关的一些Java可见性规则无法转换为Scala,但Scala在选择Java的可见性方面具有更大的灵活性.

而且,是的,Scala中有package-private.它写private[package]在Scala中.

Scala之所以成为public默认值,是因为它是最常用的可见性."额外打字"实际上更少打字,因为将会员设为私人或受保护的情况更为罕见.

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

在Scala中,因为一个人可能能够替换一个val或一个var相应的def,所以这不是必需的.

  • `将成员设为私有或受保护的情况要少得多` 对于具有 getter 和/或 setter 的属性可能是正确的,但我不同意一般情况。私有实现细节比公共 API 多得多,因为 API 公开了更高级别的方法 (2认同)

gpa*_*ara 2

这是给很多人带来一些麻烦的事情。我建议给这个文章(实际上是整个系列)。

不变性还可以防止此类访问中通常发生的任何有趣的事情。“有更多的输入”可能是真的,但看看 IDE,它们会造成很多问题,因为 IDE 生成的任何方法通常都是公共的,这也不总是有效的。