【问题标题】:WHY Java doesn't have the concept of Subpackage visibility [duplicate]为什么Java没有子包可见性的概念[重复]
【发布时间】:2020-10-30 14:09:00
【问题描述】:

Java 没有子包可见性的概念

我知道:(
Java: Subpackage visibility?

所以如果我在包 com.example.foo 中有一个 A 类(包可见)
以及 com.example.foo.bar 包内的另一个 B 类(包可见)

+-- org.example
    |
    +-- foo
        |
        +-- A
        |
        +-- bar
            |
            +-- B

它们实际上是 like 在不同的包中,然后一个类对另一个类不可见。

我一直想知道的一件事是为什么?

包的结构文件夹将鼓励像子包可见性这样的机制。
这样高层次的类就可以访问低层次的类。

在这个例子中:
A类应该可以访问B类
(内部类也是如此)

如果该机制到位,我们可以更好地组织代码并进行更好的封装。
How to organize code logically into package while preserving encapsulation

这对于 Java 世界来说将是一个非常好的功能。

不想批评,为什么要对包的可见性做出这种决定?
为什么不考虑子包的可见性?

【问题讨论】:

  • 我的猜测是因为java中确实没有子包的概念。
  • 您链接的第一个问题已经回答了您的问题:Java 没有子包,因此它不能具有子包可见性。这些包可能看起来是分层的,因为它们通常存储在文件系统中,但这并不意味着它们实际上是分层的。

标签: java package visibility


【解决方案1】:

你问的是为什么做出 25 年前的决定?

我...不认为发出这个电话的少数人会在 stackoverflow 上闲逛。

规范说没有子包这样的东西。包com.foo.bar 与包com.foo 的关系为零。

拼图系统修复了主要问题,因此问题已得到解决。

【讨论】:

  • 不完全正确。 Java 有每个 JLS 的子包,但它们除了添加一些命名约束来防止类与子包共享相同的名称之外什么也没做。特别是,正如您所提到的,它们之间没有赋予任何特殊的访问关系。 — stackoverflow.com/a/59956720/1108305
猜你喜欢
  • 2011-07-15
  • 2016-11-30
  • 1970-01-01
  • 2015-09-02
  • 1970-01-01
  • 2020-08-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多