首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >可见范围项目/模块

可见范围项目/模块
EN

Stack Overflow用户
提问于 2015-02-27 12:25:45
回答 3查看 3.8K关注 0票数 7

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

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

那么,是否有任何方法可以保护模块的类不受外部世界的影响而不将它们的范围限制在当前的包中?

谢谢!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-02-27 12:38:42

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

  • 相同或不相同的包装;
  • 继承或不继承类。

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

编辑

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

在Java 9中,您可以使用一个模块系统,它提供了对可以看到的内容的更多控制。再说一次,我对Android开发不太了解(我早在2010年就对它进行了修改,但这肯定是从那以后发生的),所以我不知道这是否适用于这个问题。

票数 0
EN

Stack Overflow用户

发布于 2017-11-10 07:52:05

jdk中没有这样的访问修饰符,但是kotlin附带了internal修饰符,它完全符合您的要求:类在模块中变为公共,但不能在模块之外访问。

要详细解释Java和Kotlin中修饰符之间的差异,请参阅片段播客的第101集 --“学习Kotlin --可见修饰符、内部修饰符、模块”以及官方文件

票数 2
EN

Stack Overflow用户

发布于 2017-11-10 07:59:42

直到Java 9,Java 9模块系统才能解决这个问题。另一个答案提到了Kotlin internal作用域,但是a) OP没有要求Kotlin解决方案,而b)我发现Kotlin internal作用域与IntelliJ没有很好地结合,考虑到JetBrains创建了两者,这是很讽刺的。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28765082

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档