【发布时间】:2012-10-17 22:15:15
【问题描述】:
我正在用 Java 构建一个非常简单的库,它将打包在一个 Jar 中。它应该只暴露一个类:World。 World 类使用 Block 类的子类,在同一个包中(com.yannbane.a),本身并没有提供很多功能,但需要扩展。我计划创建另一个包,com.yannbane.a.blocks,它将包含所有块类型(子类)。
因此,目录/包结构应如下所示:
com/
yannbane/
a/
World.java
Block.java
blocks/
Brick.java
Stone.java
但是,为了让 Block 的子类真正扩展 Block 类,我需要创建 Block 类public。这破坏了我让 Jar 文件只公开一个类 World 的目标。我还需要公开子类,以便世界可以使用它们。
我怎样才能保留这个包和目录结构,但仍然让我的 Jar 只公开 World 类,而不公开其他类?
【问题讨论】:
-
为什么您需要公开子类?不清楚……
-
你可以让 Block 成为 World 的内部类,它是私有的并且不能从外部访问吗?
-
如果您打算公开的只是 World 类,为什么其他类的位置很重要。它们也可能位于同一个包中,并且您不会遇到此类问题。你不觉得吗?
-
@EdwinDalorzo,我确实认为,是的,这将是我的问题的解决方案之一。但是,我认为使用逻辑目录结构是首选,所以我想把它做好。
-
@foampile - 如果
Block是World的private内部类,则它不能被World之外定义的任何类型扩展。
标签: java jar encapsulation