可见范围项目/模块

时间:2015-02-27 12:25:46

标签: java c# android scope jvm

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

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

那么,有没有办法保护模块的类不受外界影响而不将其范围限制在当前的包中?

谢谢!

3 个答案:

答案 0 :(得分:2)

直到Java 9. Java 9模块系统解决了这个问题。另一个答案提到了Kotlin internal范围,但是a)OP没有要求Kotlin解决方案,而b)我发现Kotlin internal范围与IntelliJ没有很好的关系,这是具有讽刺意味的考虑JetBrains创造了两者。

答案 1 :(得分:1)

在jdk中没有这样的访问修饰符,但是kotlin附带了internal修饰符,它正是你想要的:类在模块中变为公共,但在模块之外是不可访问的。

有关Java和Kotlin中修饰符之间差异的详细说明,请参阅Fragmented podcast episode #101 - “Learning Kotlin - visibility modifiers,internal modifier,modules”,以及{{ 3}}

答案 2 :(得分:0)

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

  • 是否包装相同;
  • 继承课程。

导入库时,您可以通过将自己的类放在具有相同名称的包中来访问任何非私有方法(或实际覆盖其中一个库类),因此即使您限制对包的可见性,你不能阻止某人使用包可见的类/方法。

修改

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

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