Java 接口不足以让它们背后的对象工作?

Java 接口不足以让它们背后的对象工作?,java,interface,Java,Interface,我有一个接口MigrateScenario及其方法。我也有它的实现MigrateScenarioImpl。正在序列化MigrateScenarioImpl的实例,然后将其作为字节[]传递给某个web服务。在服务方面,当我尝试这样做时: Object obj = (new ObjectInputStream(digitalObject.getContent().getInputStream())).readObject(); MigrateScenario mgrScenario = (Migra

我有一个接口MigrateScenario及其方法。我也有它的实现MigrateScenarioImpl。正在序列化MigrateScenarioImpl的实例,然后将其作为字节[]传递给某个web服务。在服务方面,当我尝试这样做时:

Object obj = (new ObjectInputStream(digitalObject.getContent().getInputStream())).readObject();
MigrateScenario mgrScenario = (MigrateScenario) obj;
我得到的是类路径中缺少MigrateScenarioImpl类。obj变量包含该对象,接口应该盲目地请求相应的方法,因为对象“知道”如何执行它们。但是,当我将MigrateScenarioImpl添加到类路径中时,一切正常。我是不是遗漏了什么?
非常感谢您的帮助,谢谢

仅仅知道接口并不能帮助JVM知道该做什么。它需要
Impl
来知道实际要做什么,而不仅仅是哪些方法可用。

仅仅知道接口并不能帮助JVM知道该做什么。它需要
Impl
来知道实际要做什么,而不仅仅是哪些方法可用。

当反序列化对象时,Java需要在类的实例中实例化和初始化。接口无法实例化,因此Java必须实例化实现类。类的序列化包含实例数据(非瞬态实例变量的值),而不是实现方法的代码,因此接口没有指向的方法。

当反序列化对象时,Java需要在类的实例中实例化和初始化。接口无法实例化,因此Java必须实例化实现类。类的序列化包含实例数据(非瞬态实例变量的值),而不是实现方法的代码,因此接口没有指向的方法。

如果类加载器不知道某个类(例如,通过在类路径上),则无法反序列化该类。类本身的代码没有序列化,另一端应该是已知的。

如果类加载器不知道某个类(例如,通过在类路径上),则无法反序列化该类。类本身的代码没有序列化,另一端应该是已知的。

我不使用Java,但是.NET中类似的代码可以简单地工作。不确定你做错了什么…@merlyn如果.NET在整个实现和对象之间发送数据,我不会感到惊讶。“听起来像是它会做的事情。”发光编码器约翰·多伊:事实上我错了。我在同一个应用程序中思考。。。跨越服务边界,您会丢失所有的实现信息,因此我不认为这在任何语言中都有效。我不使用Java,但.NET中类似的代码也可以工作。不确定你做错了什么…@merlyn如果.NET在整个实现和对象之间发送数据,我不会感到惊讶。“听起来像是它会做的事情。”发光编码器约翰·多伊:事实上我错了。我在同一个应用程序中思考。。。跨越服务边界,您将丢失所有的实现信息,因此我不希望这在任何语言中都能工作。是的,您需要在两侧都使用impl类。我不能讲其他语言,抱歉:-(是的,两边都需要IML课程。我不能讲其他语言,抱歉:-(没错,它保存字段,但不保存代码。因此,另一端不知道如何读取对象。谢谢。没错,它保存字段,但不保存代码。因此,另一端不知道如何读取对象。谢谢。