Java 定义一个明确的 package-private 修饰符
Java define a explicit package-private modifier
显然 Java 具有访问级别 package-private,这是通过不添加任何显式修饰符实现的。
但是没有办法显式地添加这个修饰符吗?当我们只想在包中使用成员时,我们需要省略访问级别,这有点令人困惑。
如果没有办法,为什么package private决定成为默认级别?
例如,如果默认级别是 public,我们会更有意识地定义相关访问级别。
这不是问题的重复,因为我知道为什么,我只是不知道为什么它是隐式定义而不能显式定义。
编辑
您可以使用 Lombok 的 @PackagePrivate
显式定义它
Used to indicate the explicit intention for the annotated entity to have the package private access level. Currently used by FieldDefaults and Value to avoid having it make a field one of public, protected, or private.
@PackagePrivate String thanksLombok;
我认为,
如果默认为
,则不好
public
因为您可能会错过指定修饰符和本应私有的代码段或某些内容可供世界访问的代码。此外,这可能违反 OOP 的核心概念之一 - 封装。
private
因为通常您希望与其他 class 交互,而不是将所有内容都写在一个 class.
中
protected
因为我希望(个人意见)文件夹(包)中的东西可以在文件夹内访问,而不是 class(子 class)驻留在某个完全不同的目录中。
如果我再做一次,我会选择 package-private 作为默认设置,因为如果一些东西在一起(在同一个包中),其意图可能是它们应该能够相互交谈。
But isn't there a way to explicitly add this modifier?
不,没有。 (缺少修改 Java 语言,这对于类似这样的事情是极不可能的。)
你的问题的其余部分需要基于意见的答案1并且是题外话。
1 - 1) 大约 25 年前做出设计决策时我们不在房间里。 2)(AFAIK)没有现存的原始语言设计决策的公开文档。 3) 在场的人可能大部分都忘记了,即使我们可以问他们。 4) 你/我对 "reverse engineer" 最初想法的任何尝试都会被 ~25 年的后见之明所影响。
显然 Java 具有访问级别 package-private,这是通过不添加任何显式修饰符实现的。
但是没有办法显式地添加这个修饰符吗?当我们只想在包中使用成员时,我们需要省略访问级别,这有点令人困惑。
如果没有办法,为什么package private决定成为默认级别?
例如,如果默认级别是 public,我们会更有意识地定义相关访问级别。
这不是
编辑
您可以使用 Lombok 的 @PackagePrivate
显式定义它Used to indicate the explicit intention for the annotated entity to have the package private access level. Currently used by FieldDefaults and Value to avoid having it make a field one of public, protected, or private.
@PackagePrivate String thanksLombok;
我认为,
如果默认为
,则不好public
因为您可能会错过指定修饰符和本应私有的代码段或某些内容可供世界访问的代码。此外,这可能违反 OOP 的核心概念之一 - 封装。
private
因为通常您希望与其他 class 交互,而不是将所有内容都写在一个 class.
protected
因为我希望(个人意见)文件夹(包)中的东西可以在文件夹内访问,而不是 class(子 class)驻留在某个完全不同的目录中。
如果我再做一次,我会选择 package-private 作为默认设置,因为如果一些东西在一起(在同一个包中),其意图可能是它们应该能够相互交谈。
But isn't there a way to explicitly add this modifier?
不,没有。 (缺少修改 Java 语言,这对于类似这样的事情是极不可能的。)
你的问题的其余部分需要基于意见的答案1并且是题外话。
1 - 1) 大约 25 年前做出设计决策时我们不在房间里。 2)(AFAIK)没有现存的原始语言设计决策的公开文档。 3) 在场的人可能大部分都忘记了,即使我们可以问他们。 4) 你/我对 "reverse engineer" 最初想法的任何尝试都会被 ~25 年的后见之明所影响。