首页 > 解决方案 > 类和方法对用户不可用,但对子包

问题描述

这个问题在这里被问过类似的问题:Java:子包可见性?

我目前的包结构是:

src/
 |   library/
 |   |    InterfaceA.java
 |   |    ClassB.java
 |   |    provider/
 |   |    |    ClassofInterfaceA.java
 |   user/
 |   |    UsageOfClassofInterfaceA.java

因此,ClassOfInterfaceA.java使用方法来自ClassB.java并实现Interface.java.

我们创建了类的用户UsageOfClassOfInterfaceA.java应该只能从 访问方法ClassOfInterfaceA.java。他不应该能够从 Library 包中访问任何类/接口/变量或方法。

由于链接问题的答案更多地针对 junit 测试以及 IDE 如何使用这些测试,因此我找不到任何答案。

请不要推荐任何其他包结构,因为这是我们的讲师预定义的。

提前致谢 :)

编辑:因为已经被问到,所有课程目前都是公开的,因为我无法通过我的ClassOfInterfaceA.java. 我还必须使用Java8。

为了解决工厂问题,ClassOfInterfaceA.javaUI 将使用 来演示它们的用法。所以UsageOfClassOfInterfaceA.java本质上是一个 UI 类。

标签: javapackage

解决方案


首先,您最初的方法是错误的:类代表实现细节。因此,您希望您的用户完全依赖界面。因此,您应该公开该接口,而不是某个实现它的类。

因此,接口变为public,其他类变为私有或受包保护。从这个角度来看,你还可以组织你的文件/包布局:应该暴露的东西应该放在同一个地方。

您需要添加的另一件事:某种允许“用户”代码获取所述接口实例的工厂(如上所述,用户类不应该知道该实现类的名称,因此它不能做一个新的()调用自身)。

最后:您应该了解 Java 9 添加了模块概念,允许考虑更多选项。


推荐阅读