You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java子包类访问权限咨询:仅暴露Main类的可行方案

Java组件访问权限优化方案

针对你希望仅暴露com.myproject.Main作为唯一入口、同时保留分层包结构的需求,你可以通过以下两种方式实现,核心是利用Java的访问控制机制:

一、Java 9+ 模块系统(推荐最佳实践)

这是最规范的强制限制可见性的方式:

  1. 在项目根目录创建module-info.java,声明模块并仅导出主包:
    module com.myproject {
        exports com.myproject;
        // 不声明导出子包,外部系统无法直接访问 com.myproject.field/helper/messages 下的任何类
    }
    
  2. 子包中的所有类使用默认访问权限(即不写public/protected/private修饰符):
    • 同一模块内的主包和子包可以互相访问这些类
    • 模块外的代码只能看到com.myproject.Main这一个public类

二、Java 8及以下兼容方案

如果项目基于Java 8或更早版本,没有模块系统支持,可以采用折中方案:

  1. 将子包中的类设为public,但添加@Internal注解(或自定义内部组件注解)标记,并在Javadoc中明确说明"禁止外部直接调用"
  2. 所有对外逻辑通过com.myproject.Main类封装,仅暴露必要的入口方法,避免外部直接接触子包类
    • 这种方式无法强制限制访问,但能通过文档和规范引导调用方遵循规则

你提到的"扁平结构+protected"完全没必要,既破坏包的组织结构,又达不到强制隐藏内部类的效果,不推荐采用。

内容的提问来源于stack exchange,提问作者AndreasInfo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 17:35:05