【问题标题】:Make java methods visible to only specific classes使 java 方法仅对特定类可见
【发布时间】:2012-11-07 11:29:49
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: java package theory access-specifier


    【解决方案1】:

    为什么不叫接口

    ManagerFunctions
    

    另一个叫

    ClientFunctions
    

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

    当您创建托管对象时,您将它们传递给周围,但仅作为对ClientFunctions 的引用。然而,管理器对象会将它们称为ManagerFunctions,因此可以访问它们的“托管”功能。适当的强制转换只会公开适当的方法。

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

    【讨论】:

    • 我已经考虑过将我的项目“API-ficating”为具有大量实现的接口集合,以便更轻松地扩展其背后的基本思想。这可能是开始实际做这件事的动力。
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

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

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

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

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

      【讨论】:

        猜你喜欢
        • 2014-01-13
        • 2014-07-20
        • 2011-05-10
        • 1970-01-01
        • 1970-01-01
        • 2011-01-05
        • 2014-06-06
        • 1970-01-01
        • 2014-04-29
        相关资源
        最近更新 更多