Java 中包私有类的优缺点?

2023-11-27

最近在学习Java,突然想到了一个概念package-private类,如果我们不指定任何内容,这就是默认值。但后来我意识到:

  1. 我很少看到使用包私有类。这样做有什么原因吗?例如,它有严重的缺点,它是多余的,或者只是我读得不够多?是否有强有力的论据支持/反对其使用?

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

  3. 现实世界中什么情况下我们应该使用package-private?也就是说,什么时候它会变得不可替代?

换句话说,默认的 package-private 修饰符的主要优点和缺点是什么?


简短的回答是——这是一种稍微更广泛的私人形式。

我假设您熟悉之间的区别public and private,以及为什么创建方法和变量通常是一种好的做法private如果它们仅在相关类内部使用。

好吧,作为其扩展 - 如果您正在考虑以模块化方式创建软件,您可能会考虑为您的应用程序提供一个公共接口module,其中将有多个类相互协作。在这种情况下,创建方法是非常有意义的public消费者是否会打电话给他们;private如果它们是类的内部;和package private如果它们用于在该模块中的类之间进行调用,即它是模块的实现细节(如公共调用者所见)但跨越多个类。

这在实践中很少使用,因为事实证明包系统对于这类事情并不是那么有用。您必须将给定模块的所有类转储到完全相同的包中,这对于任何不平凡的事情来说都会变得有点笨拙。所以这个想法很棒——让一个方法只能被少数“附近”的类访问,作为一个稍微更宽的类private- 但是对如何定义该组类的限制意味着它很少被使用/有用。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java 中包私有类的优缺点? 的相关文章

  • 将 CSV 文件读入 Java 作为数据库表

    我发现了很多关于使用 Java 读取 CSV 的帖子 并且他们所指向的 API 在读取 CSV 文件时都采用了面向行的方法 就像 当你得到一行时 获取每一列的值 我希望有一个更高级别的 API 比如在 Perl 中 DBI 允许您在 CSV
  • Selenium webdriver :列表不是通用的;它不能使用参数 `` 类型进行参数化

    我试图将链接存储在列表中 请按照以下代码操作 public class frameswitch public static void main String args System setProperty webdriver gecko d
  • 匿名内部类显示不正确的修饰符

    据我了解 以下代码应该打印true作为输出 但是 当我运行这段代码时 它正在打印false 来自 Java 文档15 9 5 匿名类 https docs oracle com javase specs jls se8 html jls 1
  • java.sql.SQLException: ORA-01005: 给定的密码为空;登录被拒绝

    我在尝试连接到数据库时遇到以下异常 java sql SQLException ORA 01005 null password given logon denied at oracle jdbc driver T4CTTIoer proce
  • 如何检查字符串是否具有特定模式[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 用户输入任意字符串 程序会区分该字符
  • 可以向 @ManyToMany Hibernate 额外表添加额外字段吗?

    我有这两类 表 Entity Table name course public class Course Id Column name courseid private String courseId Column name coursen
  • Java 中的本机方法

    我花了一些时间学习什么是 Java Native 方法以及它们是在平台相关代码 主要是 C 中实现的 但是我在哪里可以找到这些 Java 的本机实现呢 例如 Thread 类的 sleep long millis 方法是本机的 但它的实现代
  • 将二进制数据的 byte[] 转换为 String

    我有二进制格式的数据 hex 80 3b c8 87 0a 89 我需要将其转换为字符串 以便通过 Jackcess 将二进制数据保存在 MS Access 数据库中 我知道 我不打算在 Java 中使用 String 来存储二进制数据 但
  • 在 JSP 中对表单操作使用相对路径

    如何在表单操作中使用相对路径
  • Java 将字节转换为二进制安全字符串

    我有一些以字节为单位的数据 我想将它们放入Redis中 但是Redis只接受二进制安全字符串 而我的数据有一些二进制非安全字节 那么如何将这些字节转换为二进制安全字符串以便将它们保存到 Redis 中呢 Base64 对我有用 但它使数据更
  • 在 javafx 中注册鼠标处理程序,但处理程序不是内联的

    我有一个 JavaFX 应用程序变得有点大 我想保持代码的可读性 我有一个折线图 我希望内置缩放功能 该功能在单击鼠标时发生 我知道我需要向图表注册鼠标侦听器 我无法从 Oracle 示例中弄清楚什么 即如下所示 http docs ora
  • 在 JSON 对象中强制执行非空字段

    我们的 REST API 接收一些 JSON 对象输入 其中某些字段要求不为空 这些可以是字符串 整数 甚至可以是其他一些类实例作为参考 我们正在尝试找到一种方法来强制这些字段不为空 而不是在 API 中进行空检查的正确方法 当前的 if
  • 日志记录在 Android 设备上实际上有什么作用?

    我一直在 Android 示例中看到这样的代码 try catch Exception e Log e Error e getMessage 什么是Log e实际上在物理设备上做什么 它进入系统日志 开发人员可以通过 SDK 工具访问该日志
  • 为什么jdk中没有ConcurrentLinkedHashMap类?

    这个问题直接接着问从我之前的问题来看 https stackoverflow com q 12299731 1527084 我想我的第二个问题的答案是否定的 所以我想了解为什么 java util concurrent 包中没有 Concu
  • Android - 保持用户登录状态

    我正在尝试使用 PHP 和 MySQLi for Android 进行登录 我不明白的是如何保持用户登录状态 我看到一个简单的教程 其中有人使用 SQLite 来保护信息 但我不知道这是否真的安全 如何保存用户信息以保持用户登录状态 谢谢
  • 线程睡眠阻止我的 Swing 应用程序执行

    我的应用程序发生的事情是有道理的 但我不知道如何修复它 以下是我的应用程序功能的简要描述 计时器窗口应显示在屏幕右下角并显示实时时间 一小时后 它应该执行一些操作 我还没有决定该操作 我面临的问题是定时器 java当我刷新实时计时器的秒数时
  • Maven `help: effective-pom` 只为单个项目生成,而不是所有项目

    我想为多模块构建中的所有子项目生成有效的 pom The help effective pom文档here http maven apache org plugins maven help plugin usage html The hel
  • 在 Delphi XE 中将类作为过程的参数传递

    我需要做的是这样的 procedure A type of form var form TForm begin form type of form Create application form showmodal freeandnil f
  • Android应用程序中的模式输入

    我想知道是否有其他替代方案可以替代 Android 上平庸的 EditText 密码输入 是否有 API 或开源代码可以集成到我的应用程序中 类似于锁屏图案解锁 Intent 可能会返回哈希值 数字 字符串或代表用户输入的模式的任何内容 我
  • 按字母顺序对对象的 ArrayList 进行排序

    我必须创建一个方法来排序数组列表根据电子邮件按字母顺序排列对象 然后打印排序后的数组 我在排序时遇到麻烦的部分 我已经研究过并尝试使用Collections sort vehiclearray 但这对我不起作用 我是因为我需要一个叫做比较器

随机推荐

  • 在添加现有键的同时更新 python 字典?

    我正在寻找最有效和Pythonic 主要是有效 的方法来更新字典 但如果存在现有键 则保留旧值 例如 myDict1 1 3 2 3 2 1 2 3 1 myDict2 4 5 2 5 2 4 2 5 4 myDict1 update my
  • 在 jQuery 1.7 中取消选中复选框的正确方法是什么?

    我正在从 jQuery 1 5 1 升级 我已经阅读了使用 检查 复选框 在 1 6 中 的 新 方法 prop checked true 但是删除复选框的正确 首选方法是什么 这两种方法似乎都有效 someSelector removeP
  • 调试器中的 Step Into 和 Step Over 有什么区别

    我想调试 Java 程序的整个流程 我看到有几种选择stepping通过我的程序 有什么区别步入 and 跨过去 考虑以下带有当前指令指针的代码 接下来将执行的行 由 gt 在f x 线路输入g 被称为g 2 线路输入main public
  • RestSharp - 令牌身份验证

    我正在尝试发送带有令牌身份验证的 GET 请求 但收到未经授权的响应 如果我在邮递员上发送相同的请求 它就会起作用 这是我的代码 string url string Format 0 batchs MyUrl RestClient clie
  • 如何在rabbitmq中池化通道?

    我一直在尝试在线程之间共享连接 并仅在线程创建时打开通道 但经过更多研究后 我想我也想尝试connection pooling 我怎样才能在rabbitmq上做到这一点 或者这是我可以普遍应用的一般想法 我的目标是生成 X 个线程 然后让它
  • MongoDB 和 Java 驱动程序:查询中“忽略大小写”

    这是我现在使用的代码 如何添加 忽略大小写 属性 DBObject query new BasicDBObject prop value Thanks 当我遇到确切的问题时 我无法通过忽略大小写来查询 我最终复制了我想要搜索的值并将其标准化
  • 将事件侦听器作为 Class.prototype 函数删除

    我试图在我的项目中有一个基于 Class prototype 的类 但我没有内联函数 考虑到这个例子 不可能删除事件监听器myVideo我在课堂上拥有的视频对象 这是一个理论示例 而不是我的实际生产代码 var myClass functi
  • Android Studio Assistant:无法将客户端添加到您的 Firebase 项目

    当在 Android Studio 中使用新的 Firebase Assistant 添加新服务时 我收到此错误 Firebase 由于以下原因 无法将任何客户端添加到您的 Firebase 项目中 具有此包名称和 SHA1 的应用程序已连
  • Google Oauth 删除访问范围

    假设我有一个应用程序 并且我的应用程序已经运行多年 请求用户访问 相关应用程序请求的访问权限超出了所需的访问权限 或者应用程序已更改并且不再需要它所请求的某些范围 违规范围已被删除 因此不再提示新用户进行我们不需要的访问 然而 我们现在有许
  • 要求命令在 Snow Leopard 上的 bash irb 中不起作用

    我正在学习 Zed Shaw 的 艰难学习 Ruby 练习 25 http ruby learncodethehardway org ex25 html 当我导航到保存 ruby 文件 ex25 rb 的目录并启动 IRB 时 出现以下错误
  • 文本视图中的 Html 具有不同的粗体和斜体字体

    我正在尝试在TextView The TextView文本设置为textView1 setText Html fromHtml htmlText html 包含粗体和斜体跨度 现在 我购买了自定义字体 该字体附带 3 个不同的文件 ttf
  • 如何将架构和一些数据从 SQL Server 复制到另一个实例?

    我的产品使用 SQL Server 数据库 每个客户端在自己的 Intranet 上都有自己部署的实例 该数据库有大约 200 个表 其中大多数是只有几行的配置表 但也有一些事务数据表可能有几百万行 我经常需要解决客户的配置问题 因此我需要
  • 在 C++11 中处理零参数可变参数模板

    考虑以下人工示例 template
  • 在 Vim R 插件中禁用下划线“_”快捷方式插入“<-”[重复]

    这个问题在这里已经有答案了 默认情况下 Vim R plugin 插入 lt 每当我输入或粘贴下划线时 当我粘贴类似内容时 这会产生问题geom bar 这变成geom lt bar 有没有办法关闭这个捷径 我试着看看manual 向下滚动
  • 在哪里可以找到 C#/.NET NFS 实现?

    是否有任何实施NFS用 C 编写的协议或易于阅读的良好文档 以便我可以实现自己的协议 服务器和客户端都需要 但客户端不一定是C 一定有一些东西在那里 假设您没有将其视为一种学习体验 我会建议采用 C C 实现并通过 C CLI 包装它 然而
  • Scala 点语法(或缺乏)

    我正在翻阅这本精彩的书Scala 编程当我遇到一段对我来说没有意义的代码时 def above that Element Element val this1 this widen that width val that1 that wide
  • 如何为 API 级别低于 26 的 LocalDateTime 添加持续时间

    我正在开发 API 级别 19 KitKat 的应用程序 我有一个LocalDateTime对象和一个Duration目的 我需要添加这个Duration to LocalDateTime Android Studio 表明plus Tem
  • 列出文件夹中的所有文件以及子文件夹[重复]

    这个问题在这里已经有答案了 可能的重复 使用 Java 递归列出目录中的所有文件 我如何返回一个包含文件夹上所有文件以及子文件夹的文件数组 我的方法仅适用于文件夹 但不包含子文件夹 public File listf String dire
  • 使用默认值的 Python 嵌套字典查找

    gt gt gt d2 egg 3 ham grill 4 fry 6 bake 5 spam 2 gt gt gt d2 get spamx 99 99 gt gt gt d2 get ham fry 6 我想获取火腿内部炸薯条的价值 如
  • Java 中包私有类的优缺点?

    最近在学习Java 突然想到了一个概念package private类 如果我们不指定任何内容 这就是默认值 但后来我意识到 我很少看到使用包私有类 这样做有什么原因吗 例如 它有严重的缺点 它是多余的 或者只是我读得不够多 是否有强有力的