【问题标题】:RMI/Event listeners with abstract class?具有抽象类的 RMI/事件侦听器?
【发布时间】:2010-06-28 17:22:20
【问题描述】:

通常我们在事件监听中也使用接口概念来实现 RMI,我们使用接口。为什么我们不能在这两种情况下使用抽象类。

【问题讨论】:

    标签: java oop rmi


    【解决方案1】:

    因为 RMI 需要在运行时使用 JRE 的代理生成逻辑生成实现这些接口的存根和骨架类。这不适用于抽象类,因此所有 RMI 操作都必须定义为接口。

    【讨论】:

    • 仅存根。骨架已经过时了 12 年。
    【解决方案2】:

    对于事件:因为正常情况是我们有自己的实现类,它可能需要监听几个不同的事件;我们不能扩展两个不同的抽象类。

    Skaffman 已经解释了在 RMI 中使用抽象类的一个问题。我会更进一步,抽象类对于这个目的来说是完全错误的概念。服务提供者需要向其客户提供有关如何调用服务的信息。接口正是我们所需要的——它告诉客户端什么可以完成,而没有关于如何完成。当我们给出一个抽象类时,我们包括(部分)实现信息。客户端不需要看到这一点,并且在 RMI 连接中甚至可能无法编译它 - 服务器中的抽象类可能引用客户端甚至没有的类。当然,您可以删除客户不需要的所有东西,所有实现等,瞧!您返回的只是界面中所需的信息。

    所以我的做法:

    1. 定义我的接口,我与外界的合同。

    2. 如果我可能有该接口的多个实现,特别是如果我想帮助实现者,请定义一个实现该接口的抽象类。在该抽象类中包含通用的实现代码,并留下一些抽象的方法供实现者实际填写。

    或者简单地说:客户端的接口,实现者的抽象类,您可以选择同时使用两者。是的,这确实意味着一些重复,这就是我们拥有出色 IDE 的原因。

    【讨论】:

    • @JavaUser - 扩展至涵盖该内容。喜欢就说吧。
    猜你喜欢
    • 2018-09-04
    • 1970-01-01
    • 1970-01-01
    • 2011-08-07
    • 1970-01-01
    • 1970-01-01
    • 2022-01-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多