Java 定义显式的 package-private 修饰符

use*_*900 6 java access-modifiers access-levels

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

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

如果没有办法,为什么包私有决定作为默认级别?

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

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

编辑

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

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

@PackagePrivate String thanksLombok;
Run Code Online (Sandbox Code Playgroud)

Kar*_*tik 1

在我看来

如果默认的话那就糟糕了

public因为您可能会错过指定修饰符和打算私有的代码段或其他可供世界访问的代码。而且,这可能违背了 OOP 的核心概念之一——封装

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

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


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