4

我有一个负责管理某种对象的管理器类。为此,它需要操作这些对象,但这些对象与管理器没有任何关系,因此从技术上讲,它们位于单独的包 "project.managers" 和 "project.objects" 中。重要的是,有问题的对象只能由经理操作,不能在其他任何地方操作,但需要项目中的每个其他类都可以访问。

因此,我希望管理人员可以访问操作方法,但限制对其他所有类的访问。最明显的一种是将管理器类和对象类移动到同一个包中并声明操作方法受保护,但由于管理器和对象是完全独立的实体,它们在哲学上不适合。

(这部分是因为我希望我的 IDE 在我自动完成相关对象上的代码时停止向我显示操作方法,所以我总是必须通过管理器,以便在我更改相关对象时正确更新相应的表) .

对此有什么想法,或者在任何情况下明显的方式是最好的吗?

4

3 回答 3

4

为什么没有一个名为的接口

ManagerFunctions

另一个叫

ClientFunctions

您的托管对象将实现这两​​者。

创建托管对象时,您将它们传递给周围,但仅作为对ClientFunctions. 然而,管理器对象会将它们称为ManagerFunctions并因此可以访问它们的“托管”功能。适当的铸造将简单地公开适当的方法。

您的 IDE 将根据这些对象的引用方式自动为您提供适当的方法。

于 2012-11-19T14:16:35.433 回答
0

您要求类似于 C++ 的“朋友”声明的东西,但在 Java 中没有直接的等价物 - 包可见性是最接近的。或者,您可以选择像 XML DOM 这样的模型,其中应该公开的方法在接口中定义,所有客户端访问都通过这些接口。经理会知道实现的具体类,因此可以根据需要向下转换。

于 2012-11-19T14:18:20.003 回答
0

因此,我希望管理人员可以访问操作方法,但限制对其他所有类的访问。最明显的一个是将管理器类和对象类移动到同一个包中,并声明操作方法受保护......

从技术上讲,您将声明操作方法包受保护(根本没有修饰符)。受保护的方法允许更容易地扩展类。

但是由于管理器和对象是完全独立的实体,它们在哲学上并不适合。

我明白。Java 没有 C++ 的“朋友”声明。

您可以评论操作方法,但这并不能解决您的 Eclipse 问题。

于 2012-11-19T14:18:47.173 回答