我有两个包
uk.co.planetbeyond.data
和
uk.co.planetbeyond.data.bean
如何使uk.co.planetbeyond.data.bean
中的类对父包uk.co.planetbeyond.data
中的类可见,但在其他包中不可见?
甚至可能吗?
答案 0 :(得分:47)
据我所知,这是不可能的。虽然我们倾向于将认为的包形成层次结构,但它们并不像Java语言那样。
答案 1 :(得分:28)
正如所有其他答案中所述:不。包装层次结构对于设置它的人来说没有任何意义。
在我看来,这是Java的主要缺陷。通过将其他怪物程序合并在一起构建怪物系统时,没有什么能比Java语言更好。所有其他语言最终都会陷入混乱,无法记录,难以理解的代码堆中。
那么,Java也是如此,但它比我使用的任何其他语言都要进一步发展。但是它对包层次结构的无知 - 无法将数据封装在包层次结构中 - 是阻止它的限制或砖墙。我可以将一个系统或一组一起工作的类放在一个包中。然后我可以将这些类包中的一堆私有,这样当这个包被添加到另一个超级系统时,超级系统无法看到 - 并被这些隐藏的类混淆。
但如果我的系统已足够超级(“超级”,如“超人”,而不是“超类”)需要几个包以清楚,我以前的包私有类现在必须是公开的,我无法阻止超级超级系统看到我的超级系统中的所有东西。
要使庞大而复杂的系统工作,必须尽量减少每个点的复杂性。我的超级系统必须看起来尽可能简单到我正在添加它的超级超级系统。所有的管道和电线以及横梁和焊缝都是公开展示的,因为我无法将它们打包成私人包装,这对此没有帮助。
我希望其他地方提到的Jigsaw会有所帮助。我也希望像IDE这样的开发人员工具能够以大纲格式开始显示包,而不是将a.b和a.b.c.d.e视为同一级别 - 只是同一列表中的元素。
答案 2 :(得分:7)
简短回答,除非您的uk.co.planetbeyond.data.bean包中有类的子类,否则不可能。
您可能有兴趣阅读:
http://docs.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html
Isn't "package private" member access synonymous with the default (no-modifier) access?
In Java, difference between default, public, protected, and private
答案 3 :(得分:7)
目前,这是不可能的。 Java包本质上不是分层的 - 类可以在同一个包中,也可以不在。
但是,这可能是Project Jigsaw将解决的问题之一,它可能包含在Java 8中。这应该允许创建在模块的所有包中公开的类,但不是导出到其他模块。
答案 4 :(得分:4)
不,这是不可能的。包可见性无法有选择地扩展到其他包。一个类可能只是私有的(也就是说,只对非私有的封闭类可见),package-private(没有修饰符,只对同一个包中的其他类可见)或public(对所有类都可见)。 / p>
答案 5 :(得分:4)
据我所知,在Java中是不可能的。 有关更多信息,请参阅链接here,该链接清楚地解释了Java中的访问修饰符。