当前位置: 首页 > 面试题库 >

Java包私有类的优缺点?

吉凯捷
2023-03-14
问题内容

我最近正在学习Java,并且遇到了package-private类的概念,如果我们不指定任何内容,这是默认的。但是后来我意识到:

  1. 我很少看到package-private类的使用。是否有这个原因,例如,它有严重的缺点,它是多余的,或者仅仅是我阅读不足?是否有反对使用它的有力论据?

  2. 如果在大多数情况下确实没有用,为什么要使用默认值?

  3. 在实际情况下,我们应该在什么情况下使用package-private?即,什么时候它将变得不可替代?

换句话说,默认的package-private修饰符的主要利弊是什么?


问题答案:

简短的答案是-它是私有形式的一种。

我假设你熟悉的区别publicprivate,以及为什么它通常是很好的做法,使方法和变量private,如果他们要单独用于内部问题的类。

好吧,作为对此的扩展-如果您正在考虑以模块化方式创建软件,则可以考虑 模块 的公共接口,该 模块
内部将具有多个相互协作的类。在这种情况下,public如果要由消费者调用方法,则完全有道理。private如果他们在班级内部;以及package private是否使用它们在此模块中的类之间进行调用,即它是模块的实现细节(如公共调用者所见),但跨越多个类。

实际上很少使用这种方法,因为包装系统对于这种事情并不是那么有用。您必须将给定模块的所有类都转储到完全相同的程序包中,对于那些不重要的事情,这将变得有些笨拙。因此,这个主意很棒-
使一个方法只能供少数“附近”类访问,private而后者要稍宽一些-但对如何定义该类集的限制意味着该方法很少使用/有用。



 类似资料:
  • 问题内容: 我想为我的应用程序生成javadocs,也希望包括私有成员。 我在Javadoc文档中找到了以下内容 您能举一个例子来帮助我吗? 它应该类似于:。我需要知道如何为生成的html doc文件提供根目录和目标目录。 谢谢。 编辑: 我找到了一种从NetBeans 6.8生成javadoc的方法。如下所示: NetBeans Java项目通常在项目的属性部分中为此提供一个参数。您可以在“项目

  • 我知道如何访问私有变量,但我正在尝试测试以下类: ProcessStatusResult: 在我的测试中,我需要在ProcessStatusBody中获取ProcessStatus来验证它,但我不知道如何做到这一点。 有没有一种方法可以使用反射(或其他方法)来访问它,而不必仅仅为了测试而在ProcessStatusResult中添加getter?

  • 问题内容: 将方法标记为程序包专用类是否有所不同? 之间和此处的可见性是否有实际差异? 问题答案: 如果该类不会被另一个更可见的子类扩展,则唯一的区别是 intent的清晰度* 。将所有方法包都声明为私有,使以后的读者更加难以确定同一包中的其他类将调用哪些方法。 作为我的设计解决方案,这没有多大意义,但是从技术上来说还是有可能的。

  • 问题内容: 如果我有一个包私有的Java类(用“ class”声明,而不是“ public class”),那么将内部方法声明为public或protected或package- private确实没有区别,对吗?那么我应该使用哪个,或者什么时候该使用呢?我有点困惑。 问题答案: 如果我有一个包私有的Java类(用“ class”声明,而不是“ public class”),那么将内部方法声明为p

  • 问题内容: 我有以下课程 你好 嗨.java CustomMap.java 直到我从中删除访问说明符之前,这都可以正常工作 编译器大喊 类型speak.hi.CustomMap不 可见 现在,如果我没有修改的选项(第三方jar等),还有什么我可以使用的方法吗? 我知道的一个选项是转到,因为Hello已在程序包中,它可以访问程序包私有类。 还有其他方法吗?也许使用反射? 编辑 :按@StephenC

  • 我正在阅读一书,在中提到: 为了便于测试,您可能会尝试使类、接口或成员更容易访问。在某种程度上这是好的。为了测试一个公共类包的私有成员是可以接受的,但将可访问性提高到更高是不可接受的。换句话说,将类、接口或成员作为包导出API的一部分以促进测试是不可接受的。