我有两个项目/模块链接在Android中。其中一个类充当Api/Core,我需要某些类只能从这个模块访问,但可以从它的所有包中访问(因此在这种情况下“默认”是无用的)。
但是,在Java中,它似乎不是一个内部修饰符(c# )。“模块”修饰符是为Java 7提出的,但它没有实现。
那么,是否有任何方法可以保护模块的类不受外部世界的影响而不将它们的范围限制在当前的包中?
谢谢!
发布于 2015-02-27 12:38:42
对于Android,我不确定,但在标准Java中,答案是否定的:整个可见性只基于两个参数:
导入库时,您可以通过将自己的类放入同名的包中来访问任何非私有方法(或实际上覆盖一个库类),因此即使将可见性限制在包中,也不能阻止某人使用包可见类/方法。
编辑
请注意,这个答案适用于Java 8。
在Java 9中,您可以使用一个模块系统,它提供了对可以看到的内容的更多控制。再说一次,我对Android开发不太了解(我早在2010年就对它进行了修改,但这肯定是从那以后发生的),所以我不知道这是否适用于这个问题。
发布于 2017-11-10 07:52:05
jdk中没有这样的访问修饰符,但是kotlin附带了internal修饰符,它完全符合您的要求:类在模块中变为公共,但不能在模块之外访问。
要详细解释Java和Kotlin中修饰符之间的差异,请参阅片段播客的第101集 --“学习Kotlin --可见修饰符、内部修饰符、模块”以及官方文件。
发布于 2017-11-10 07:59:42
直到Java 9,Java 9模块系统才能解决这个问题。另一个答案提到了Kotlin internal作用域,但是a) OP没有要求Kotlin解决方案,而b)我发现Kotlin internal作用域与IntelliJ没有很好地结合,考虑到JetBrains创建了两者,这是很讽刺的。
https://stackoverflow.com/questions/28765082
复制相似问题