使java方法仅对特定类可见

时间:2012-11-19 14:13:27

标签: java package theory access-specifier

我有一个经理类负责管理某种对象。要做到这一点,它需要操纵这些对象,但这些对象与管理器无关,所以从技术上讲,它们位于单独的包“project.managers”和“project.objects”中。重要的是,有问题的对象只能由管理者操纵,而不是其他任何地方,但需要项目中的其他每个类都可以访问。

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

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

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

3 个答案:

答案 0 :(得分:4)

为什么没有名为

的界面
ManagerFunctions

和另一个叫

ClientFunctions

您管理的对象将实现这两个

创建托管对象时,可以传递它们,但仅作为对ClientFunctions的引用。但是,管理器对象将它们称为ManagerFunctions,因此可以访问其“托管”功能。适当的铸造将简单地暴露出适当的方法。

您的IDE将根据引用这些对象的方式自动显示相应的方法。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

  

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

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

  

但由于管理者和对象是完全独立的实体,因此它们不适合哲学。

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

您可以对操作方法进行注释,但这并不能解决您的Eclipse问题。