-1

我在 Java 中有一个包结构,它应该可以访问,如下所示。

在此处输入图像描述

如何使底层包类只能被中间包访问?TestApp 应该只与接口包直接通信。TestApp 不应获得有关基础和中间包类的任何信息。怎么做?请帮忙

4

3 回答 3

1

您可以将 TestApp 和 Interface 放在同一个包中。然后 Interface 必须继承 Middle 使用受保护的方法。然后 Middle 在同一个使用包保护方法的底层包中。

它可以满足您的要求,但老实说,我认为这样做没有任何意义。它假设“接口包”不是Java接口......

Ceylon 语言可能对代码单元和模块有更好的概念,但 Java 6,7 和 8 语言还没有准备好向其他程序员真正隐藏东西。

于 2012-09-24T12:03:50.957 回答
1

是不可能的。
您可以设置对类的包访问权限,但您将面临从其他包调用它们的困难。这意味着从中间包到底层包的访问本质上与从TestApp到底层包的访问相同。
UPD:我看到了关于继承的答案,但它并没有完全解决问题——你可以从 TestApp 中的底层包继承,没有什么能阻止你。
UPD2:顺便说一句,你的要求让我想起了friendC++ 中的关键字。它在 Java 中不存在。

于 2012-09-24T12:06:49.217 回答
1

不可能在 Java 中使用“朋友”系统来指定对包成员的更细粒度的访问。如果你让某个包外的东西可见,那么包外的任何东西都可以访问它。

您可以为 TestApp 和 Interface Package 包使用一个通用包,但这在语义上并不正确 - 您将客户端与接口混合在一起。

如果您想强制执行模块化,OSGi允许您将单元内的某些包标记为“内部” - 这些根本不会暴露(“连接”)给客户端。

于 2012-09-24T12:06:57.703 回答