为何包私有类无法从嵌套包访问?测试注解权限疑问
包私有注解无法在嵌套包访问的原因
Java里的包私有权限(即没有显式public/protected/private修饰符的类/注解),仅允许同一个包内的代码访问,而嵌套包(比如com.myproject.test.it和com.myproject.test.it.foo)在Java中是完全独立的两个包——名称上的“嵌套”只是代码组织的逻辑结构,编译器和JVM不会将它们视为同一包的一部分,自然不存在权限继承关系。
拿你的场景举例:
BaseIT注解属于com.myproject.test.it包,包私有权限仅对该包下的类开放访问FooIT属于com.myproject.test.it.foo包,这是一个和上层完全独立的包,因此没有权限访问BaseIT
如果想让注解能被嵌套包使用,有两个可行方向:
- 将注解的访问修饰符改为
public,若需要限制使用范围,可结合Java模块系统的导出规则,或用@VisibleForTesting这类标记标注预期使用场景 - 调整测试类的包结构,把需要使用注解的测试类都放到和注解同一个包下,但这可能不符合你原本的规划
内容的提问来源于stack exchange,提问作者Jaumzera
相关产品推荐
相关产品推荐

