5

显然,Java 有一个访问级别的包私有,它通过不添加任何显式修饰符来实现。

但是没有办法显式添加这个修饰符吗?当我们只想在包中使用成员时,我们需要省略访问级别,这有点令人困惑。

如果没有办法,为什么 package private 决定成为默认级别?

例如,如果默认级别是公开的,我们会更有意识地定义相关的访问级别。

这不是为什么使用它的问题的重复,因为我知道为什么,我只是不知道为什么它是隐式定义而不能显式定义的。

编辑

您可以使用 Lombok 的@PackagePrivate显式定义它

用于指示注释实体具有包私有访问级别的明确意图。当前由 FieldDefaults 和 Value 使用,以避免使其成为公共、受保护或私有的字段之一。

@PackagePrivate String thanksLombok;
4

2 回答 2

1

但是没有办法显式添加这个修饰符吗?

不,没有。(没有修改 Java 语言,这样的事情不太可能发生。)

您的问题的其余部分要求基于意见的答案1并且是题外话。


1 - 1) 大约 25 年前,当我们做出设计决定时,我们不在房间里。2)没有(AFAIK)原始语言设计决策的现有公开文档。3)即使我们可以问他们,房间里的人也可能大部分都忘记了。4)你/我对“逆向工程”原始想法的任何尝试都会被大约 25 年的事后诸葛亮。

于 2018-10-08T23:33:25.070 回答
1

在我看来

如果默认值是

public因为您可能会错过指定修饰符和旨在私有的代码段,或者世界可以访问某些内容。此外,这可能违反了 OOP 的核心概念之一——封装

private因为通常您希望与其他类进行交互,而不是在一个类中编写所有内容。

protected因为我希望(个人意见)文件夹(包)中的东西可以在文件夹内访问,而不是在驻留在某个完全不同的目录中的类(子类)中。


如果我再做一次,我会选择 package-private 作为默认值,因为如果有些东西放在一起(在同一个包中),目的可能是它们应该能够相互交谈。

于 2018-10-03T05:44:42.880 回答