可见范围项目/模块

Víc*_*tos 6 c# java android jvm scope

我在Android Studio中链接了两个项目/模块.其中一个充当Api/Core,我需要某些类只能从这个模块访问,但可以从它的所有包中访问(因此在这种情况下"默认"是无用的).

但似乎在Java中它不是像内部(c#,swift)那样的修饰符."模块"修饰符是为Java 7提出的,但它没有实现.

那么,是否有任何方法可以保护模块的类与外界不同,而不会将其范围限制在当前的包中?

谢谢!

Cho*_*hop 0

我不确定 Android 的情况,但在标准 Java 中,答案是否定的:整个可见性仅基于两个参数:

  • 是否相同的包装;
  • 是否继承该类。

导入库时,您可以通过将自己的类放入同名的包中来访问任何非私有方法(或实际上覆盖库类之一),因此即使您限制对包的可见性,也无法阻止有人使用包可见的类/方法。

编辑

请注意,此答案适用于 Java 8。

从 Java 9 开始,您可以使用模块系统,该系统可以更好地控制在哪里可以看到什么。再说一次,我对 Android 开发了解不多(我在 2010 年对它进行了修改,但从那时起它肯定已经发展),所以我不知道这是否适用于这个问题。