具有抽象类的RMI /事件监听器?

时间:2010-06-28 08:36:08

标签: java oop rmi

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

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

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

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

所以我的做法:

  1. 定义我的界面,我与外界的合约。

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

  3. 或简单地说:客户端的接口,实现者的抽象类,您可以选择同时使用它们。是的,这确实意味着一些重复,这就是为什么我们有很好的IDE。