cor*_*zza 5 java encapsulation jar
我正在用Java构建一个非常简单的库,它将打包在一个Jar中.它应该只暴露一个类:世界.World类使用Block类的子类,它位于同一个package(com.yannbane.a)中,并且本身不提供很多功能,但需要进行扩展.我计划创建另一个包,com.yannbane.a.blocks它将包含所有块类型(子类).
因此,目录/包结构应如下所示:
com/
yannbane/
a/
World.java
Block.java
blocks/
Brick.java
Stone.java
Run Code Online (Sandbox Code Playgroud)
但是,为了使Block的子类实际扩展Block类,我需要创建Block类public.这破坏了我的目标,即让Jar文件只暴露一个类World.我还需要将子类公开,以便World可以使用它们.
我如何保留这个包和目录结构,但仍然让我的Jar只公开World类,而不是其他类?
如果这是封装的问题,并且您想要暴露给世界的只是“World”类,那么未暴露的类是否位于同一个包中或者它们是否是同一个包中的内部类并不重要。
无论如何,您的 API 的用户将无法访问它们。我相信封装在这里比您想要为文件提供的“逻辑”组织更重要。因为如果您将所有类放在同一个包中,那么您将不会遇到这些问题,并且您将达到您正在寻求的封装级别。也许 Java 告诉您这些类本质上是相关的,因此您应该将它们全部放在同一个包中。