42 java
我有两个包
uk.co.planetbeyond.data
Run Code Online (Sandbox Code Playgroud)
和
uk.co.planetbeyond.data.bean
Run Code Online (Sandbox Code Playgroud)
如何使uk.co.planetbeyond.data.bean类在父包中的类中可见,uk.co.planetbeyond.data但在其他包中不可见?
它甚至可能吗?
Ral*_*pin 28
正如所有其他答案中所述:不.包层次结构在设置它的人的心中没有任何意义.
在我看来,这是Java的主要缺陷.通过将其他怪物程序合并在一起构建怪物系统时,没有什么能比Java语言更好.所有其他语言最终都会陷入混乱,无法记录,难以理解的代码堆中.
那么,Java也是如此,但它比我使用的任何其他语言都要进一步发展.但是它对包层次结构的无知 - 无法将数据封装在包层次结构中 - 是阻止它的限制或砖墙.我可以将一个系统或一组一起工作的类放在一个包中.然后我可以将这些类包中的一堆私有化,这样当这个包被添加到另一个超级系统时,超级系统无法看到 - 并且被这些隐藏的类弄糊涂了.
但是,如果我的系统已经足够超级("超级",如"超人",而非"超级")需要几个包清楚,我以前的包私有类现在必须公开,我不能阻止超级 -超级系统从我的超级系统中看到一切.
要使庞大而复杂的系统工作,必须尽量减少每个点的复杂性.我的超级系统必须看起来尽可能简单到我正在添加它的超级超级系统.所有的管道和电线以及横梁和焊缝都是公开展示的,因为我无法将它们打包成私有包装并没有帮助.
我希望其他地方提到的Jigsaw会有所帮助.我也希望IDE之类的开发人员工具能够以大纲格式开始显示包,而不是将ab和abcde视为同一级别 - 只是同一列表中的元素.
简短的回答,除非您的uk.co.planetbeyond.data.bean包中的类的子类,否则它是不可能的.
您可能有兴趣阅读:
http://docs.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html
目前,这是不可能的.Java包本质上不是分层的 - 类可以在同一个包中,也可以不在.
但是,这可能是Project Jigsaw将要解决的问题之一,它可能包含在Java 8中.这应该允许创建在模块的所有包中公开的类,但不会导出到其他模块.
| 归档时间: |
|
| 查看次数: |
17115 次 |
| 最近记录: |