讲师中心 微信公众号
AI工具推荐 视频效率加速

如何通过访问权限修饰符的组合实战定义模块化开发中的变量暴露边界

老明姑娘_3692

老明姑娘_3692

发布时间:2026-05-26 09:23:19

|

417人浏览过

|

来源于php中文网

原创

模块化开发中变量暴露边界的本质是按需开放访问权限:包内用default实现高内聚协作,继承体系用protected+private控制能力边界,对外服务用public配合校验与防御性拷贝,再通过module-info.java二次过滤导出包。

如何通过访问权限修饰符的组合实战定义模块化开发中的变量暴露边界

模块化开发中变量暴露边界的本质,是让每个模块只向需要它的对象“开一扇合适的门”,而不是把所有门都敞开或全锁死。关键不在单个修饰符怎么用,而在于它们如何组合配合业务场景——比如包内协作、继承复用、对外服务这三类典型需求。

同一业务包内:用default(无修饰符)建立高内聚协作

当订单、订单项、支付三个类同属com.example.order包时,它们之间共享中间计算逻辑或临时状态字段是合理且必要的。这时不加任何修饰符的default权限就是最佳选择:

  • 字段如BigDecimal calculatedTax可设为default,供包内其他类读取但不对外暴露
  • 工具方法如validateOrderItems()也用default,避免被跨包误调用,又不用重复实现
  • 一旦有类移出该包,自动失去访问权,边界清晰,无需额外维护

继承体系中:用protected + private组合控制子类能力边界

父类不能直接暴露字段给子类,否则会把实现细节钉死;但又要让子类能复用核心逻辑。推荐做法是:

  • 敏感字段保持private,如private Connection dbConn
  • 提供protected方法封装操作,如protected void executeWithRetry(Runnable task)
  • 子类可调用或重写该方法,但无法绕过重试逻辑直接操作连接
  • 避免使用protected字段——它会让子类和父类强耦合,改一个就可能崩一片

对外服务接口:public方法必须带校验与防御性拷贝

public不是“放行章”,而是“守门员”。哪怕只是一个getter,也要考虑外部是否能借此破坏内部状态:

  • public List<orderitem> getItems()</orderitem>要返回Collections.unmodifiableList(items),而非原始引用
  • public void setDiscount(BigDecimal discount)必须检查discount != null && discount.compareTo(BigDecimal.ZERO) >= 0
  • 不为private字段机械生成getter/setter,只暴露真正需要被外部读写的语义属性
  • 校验失败抛IllegalArgumentException,不静默吞掉错误

模块级封装:结合module-info.java做二次过滤

即使类内部用了public,模块系统也能再拦一道。在module-info.java中精确导出接口包:

  • 只exports com.example.order.api;,隐藏com.example.order.internal所有实现
  • 即便某public类意外暴露了不该有的方法,只要没导出所在包,外部模块连类名都加载不到
  • 运行时反射访问非导出包会触发IllegalAccessError,安全边界更硬

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
VibeKnow
VibeKnow Hot

一款AI视频创作工具,主要用于全球首个AI知识视频创作平台,文档、文章、网页,一键生成视频,适合需要提升相关任务效率的用户。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

小橡皮AI

一款AI工具,主要用于小橡皮一键去AI味,将机器味重的内容改得更有活人感,防止因为 AI 内容被平台打上 AI 标签,以及限流,适合需要提升相关任务效率的用户。

花生AI
花生AI Hot

一款AI视频创作工具,主要用于B站推出的AI视频创作工具,适合需要提升相关任务效率的用户。

超级简历WonderCV

一款AI办公效率工具,主要用于免费求职简历模版下载制作,应届生职场人必备简历制作神器,适合需要提升相关任务效率的用户。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

Seko
Seko Hot

一款AI视频创作工具,主要用于商汤科技推出的创编一体的AI短视频创作Agent,适合需要提升相关任务效率的用户。

Flowith
Flowith Hot

Flowith是一款基于画布和智能体工作流的 AI 协作工作空间。

相关专题

更多
java
java

Java是一个通用术语,用于表示Java软件及其组件,包括“Java运行时环境 (JRE)”、“Java虚拟机 (JVM)”以及“插件”。php中文网还为大家带了Java相关下载资源、相关课程以及相关文章等内容,供大家免费下载使用。

12017

2023.06.15

java正则表达式语法
java正则表达式语法

java正则表达式语法是一种模式匹配工具,它非常有用,可以在处理文本和字符串时快速地查找、替换、验证和提取特定的模式和数据。本专题提供java正则表达式语法的相关文章、下载和专题,供大家免费下载体验。

9102

2023.07.05

java自学难吗
java自学难吗

Java自学并不难。Java语言相对于其他一些编程语言而言,有着较为简洁和易读的语法,本专题为大家提供java自学难吗相关的文章,大家可以免费体验。

7792

2023.07.31

java配置jdk环境变量
java配置jdk环境变量

Java是一种广泛使用的高级编程语言,用于开发各种类型的应用程序。为了能够在计算机上正确运行和编译Java代码,需要正确配置Java Development Kit(JDK)环境变量。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

1264

2023.08.01

java保留两位小数
java保留两位小数

Java是一种广泛应用于编程领域的高级编程语言。在Java中,保留两位小数是指在进行数值计算或输出时,限制小数部分只有两位有效数字,并将多余的位数进行四舍五入或截取。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

1008

2023.08.02

java基本数据类型
java基本数据类型

java基本数据类型有:1、byte;2、short;3、int;4、long;5、float;6、double;7、char;8、boolean。本专题为大家提供java基本数据类型的相关的文章、下载、课程内容,供大家免费下载体验。

1516

2023.08.02

java有什么用
java有什么用

java可以开发应用程序、移动应用、Web应用、企业级应用、嵌入式系统等方面。本专题为大家提供java有什么用的相关的文章、下载、课程内容,供大家免费下载体验。

3149

2023.08.02

java在线网站
java在线网站

Java在线网站是指提供Java编程学习、实践和交流平台的网络服务。近年来,随着Java语言在软件开发领域的广泛应用,越来越多的人对Java编程感兴趣,并希望能够通过在线网站来学习和提高自己的Java编程技能。php中文网给大家带来了相关的视频、教程以及文章,欢迎大家前来学习阅读和下载。

20391

2023.08.03

DBeaver怎么导入数据
DBeaver怎么导入数据

DBeaver数据导入专题,整理Excel、CSV、SQL、TXT等常见文件的数据导入方法,涵盖目标数据库选择、数据表创建、字段映射、数据类型设置及导入参数配置等操作,帮助用户将本地文件中的数据写入数据库,并了解批量导入、重复数据处理和导入失败等常见问题的解决方法。

20

2026.11.05

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn