繁体   English   中英

使包受保护的Java类在父包中可见

[英]Making package-protected java class visible in parent package

我有两个包

uk.co.planetbeyond.data

uk.co.planetbeyond.data.bean

如何才能使uk.co.planetbeyond.data.bean中的类对父包uk.co.planetbeyond.data类可见,但在其他包中不可见?

它甚至可能吗?

据我所知,这是不可能的。 虽然我们倾向于认为包形成层次结构,但它们并不涉及Java语言。

正如所有其他答案中所述:不。包装层次结构意味着设置人员的思想之外没有任何东西。

在我看来,这是Java的主要缺陷。 通过将其他怪物程序合并在一起构建怪物系统时,没有什么能比Java语言更好。 所有其他语言最终都会陷入混乱,无法记录,难以理解的代码堆中。

那么,Java也是如此,但它比我使用的任何其他语言都要进一步发展。 但是它对包层次结构的无知 - 无法将数据封装在包层次结构中 - 是阻止它的限制或砖墙。 我可以将一个系统或一组一起工作的类放在一个包中。 然后我可以将这些类包中的一堆私有化,这样当这个包被添加到另一个超级系统时超级系统无法看到 - 并且被这些隐藏的类弄糊涂了。

但是,如果我的系统已经足够超级(“超级”,如“超人”,而非“超级”)需要几个包清楚,我以前的包私有类现在必须是公开的,我不能阻止超级 -超级系统从我的超级系统中看到一切。

要使庞大而复杂的系统工作,必须尽量减少每个点的复杂性。 我的超级系统必须看起来尽可能简单到我正在添加它的超级超级系统。 所有的管道和电线以及横梁和焊缝都是公开展示的,因为我无法将它们打包成私有包装并没有帮助。

我希望其他地方提到的Jigsaw会有所帮助。 我也希望IDE之类的开发人员工具能够以大纲格式开始显示包,而不是将ab和abcde视为同一级别 - 只是同一列表中的元素。

目前,这是不可能的。 Java包本质上不是分层的 - 类可以在同一个包中,也可以不在。

但是,这可能是Project Jigsaw将要解决的问题之一,它可能包含在Java 8中。这应该允许创建在模块的所有包中公开的类,但不会导出到其他模块。

不,这是不可能的。 包可见性无法有选择地扩展到其他包。 类只能是私有的(即,仅对非私有封闭类可见),package-private(无修饰符,仅对同一包中的其他类可见)或public(对所有类可见)。

据我所知,在Java中是不可能的。 有关更多信息,请参阅此处的链接,该链接清楚地解释了Java中的访问修饰符。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM