3

以我的经验,Java 中类的包私有可见性被证明是多余的。

包私有可见性似乎基于这样一个前提,即一个几乎被另一个类私有使用的类很可能保存在同一个包中。通常情况并非如此。有人在探索改进的访问修饰符/替代机制吗?

尝试使用包私有可见性的问题:

  • 我们很想将功能不相关的类放在同一个包中以获得这种好处

使用 public 代替的问题:

  • API 被污染。导入库 Jar 后,客户会看到其他几个他无需担心的公共类
  • 从编码标准的角度来看,没有简单的方法可以确保开发人员不会在时间紧迫时完成短路调用(短路调用是指绕过层的方法调用(例如从 Servlet 直接到 DAO 绕过豆/BO)

当前的解决方法:

  • 为了阻止短路调用,我们通常将应用程序的不同部分打包到几个 JAR 中,并确保每个构建的构建环境中只有相应的 JAR 可用。(例如,在编译 Swing 客户端类时,server.jar 将不可用。只有客户端类和 common.jar 可用。)

问题:

  1. 想出一个新的可见性修改器/替代方案不是很有用吗?
  2. 这些方面的东西是否已经在进行中?
  3. 像 Spring/Guice 这样的框架是否足以替代?
4

2 回答 2

1
  1. 是的,我认为它会很有用。

  2. 我认为您正在寻找的是项目拼图,它最终将进入 Java 9。我不是这方面的专家,但您可以查看以下问题及其答案以获得一个想法:

  3. 我没有使用这些框架的经验。

于 2014-06-02T13:36:38.997 回答
1

看起来像一个功能scala。访问修饰符有一个范围。我发现本教程很有用。

方法在某些包的范围内可以是私有的

package company.module.domain

class Example {
  private[module] def moduleMethod = ???
  private[domain] def domainMethod = ???
}

在此示例中,包及其子包(如)moduleMethod内的任何地方都可用。方法只在包内可见,在外不可见。moduledomaindomainMethoddomain

不幸的是,此功能不兼容,java并且这些限制被编译为字节码,失去了限制,即公共

于 2016-07-30T15:31:48.337 回答