让我们说你有接口定义.
该接口可以是Operation.
然后,您有两个应用程序在不同的JVM中运行,并通过交换操作实例以某种方式远程通信.
让我们称之为应用程序一和应用乙.
如果应用程序A使用应用程序B的类路径中不可用的类实现Operation,那么应用程序B是否仍然能够处理该接口的实现?即使B在不同的JVM中?
这取决于你的"以某种方式远程通信"部分发生的魔力.
如果通过RMI或类似技术进行此通信,那么这将没有问题.应用程序B将Operation
在JVM A中为对象创建远程代理,并且在此代理上调用方法会生成对JVM A的HTTP请求,这些请求将针对生活在该JVM(可以访问实现类)的实际对象进行解析.
如果通过序列化对象并通过线路发送它来完成此通信,那么它将无法工作.当来自应用程序A的对象到达JVM B时,反序列化将失败(使用ClassNotFoundException
或类似).
可能还有其他远程技术,在这种情况下,事情依赖于实现.我知道类加载器可以从字节数组中加载类,因此在概念上很可能有这样的类加载器能够从远程源加载类.理论上,网络库可以通过这种方式串行化实际类,因此,虽然JVM B本身不知道实现类,但它的类加载器将根据需要提供类'字节码.