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

将不同文件夹下的Java类归为同一包是否为良好实践?

问题背景与咨询

假设存在如下文件夹结构:

main\
  \pack1
    a\A.java
    b\B.java

A.java与B.java不在同一文件夹中,但二者均使用如下包声明:

package main.pack1;

此时它们互相访问protected字段不会出现编译错误。若分别使用如下包声明:

package main.pack1.a;
package main.pack1.b;

则无法互相访问protected字段,这符合预期。

现咨询:将不同文件夹下的类归为同一包是否属于良好实践?我希望通过文件夹结构整理Java文件以优化组织(避免单个文件夹中有20个文件),同时保持同一包以实现protected字段的访问。

回答

这种做法不算Java社区的常规良好实践,核心原因和替代方案如下:

  • 违背Java核心约定:Java的通用规则是「包结构与文件夹路径严格对应」,这是IDE、编译工具、构建系统默认遵循的标准。强行让不同文件夹的类归属同一包,会让其他开发者在查找类时产生混乱,也可能导致IDE索引异常、路径提示错误等问题。

  • 弱化包的模块化价值:包的本质是划分代码边界、控制访问权限、避免类名冲突。如果仅为了使用protected访问就打破包与文件夹的对应关系,等于放弃了包的模块化能力,长远来看会让代码的权限逻辑变得混乱,维护成本大幅上升。

  • 更合理的替代方案:如果既想优化文件结构,又要实现类之间的字段访问,推荐这些方式:

    • 使用包级私有访问:去掉protected修饰符(默认访问权限为包私有),既符合包与文件夹对应的约定,又能让同一包下的类互相访问。
    • 拆分包并调整访问逻辑:如果需要拆分子包,可以将共享字段/方法放到父类中,让子类继承后访问;或者通过「公共接口+包私有实现」的方式,既拆分结构又保留必要的访问能力。
    • 重构代码内聚性:如果20个类都需要互相访问protected成员,说明这些类耦合度极高,要么本来就应该放在同一文件夹,要么可以拆分成几个功能内聚的子模块,模块内部用包私有访问,模块间通过公共接口交互。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 09:30:23