2011-03-13 56 views
1

我有一个接口MigrateScenario及其方法。我也有它的实现MigrateScenarioImpl。 MigrateScenarioImpl的实例正在序列化,然后作为byte []传递给某个Web服务。在服务方面,当我尝试这样做:接口是不够的,他们背后的对象工作?

Object obj = (new ObjectInputStream(digitalObject.getContent().getInputStream())).readObject(); 
MigrateScenario mgrScenario = (MigrateScenario) obj; 

和我所得到的是MigrateScenarioImpl类是在classpath中失踪。 obj变量包含该对象,并且该接口应该盲目地询问相应的方法,因为该对象“知道自己”如何执行它们。但是,当我将MigrateScenarioImpl添加到类路径时,则所有工作都正常。我在这里错过了什么吗? 将不胜感激任何帮助,谢谢!

+0

我不使用Java,但.NET中的类似代码很简单。不知道你在做什么错... – 2011-03-13 22:50:37

+0

@merlyn我不会感到惊讶,如果.NET发送实施以及对象。听起来像是它会做的事情。 – corsiKa 2011-03-13 22:54:08

+0

@ glowcoder,John_Doe:其实我错了。我在同一个应用程序中考虑过...在服务范围内,你失去了所有的实现信息,所以我不希望它以任何语言工作。 – 2011-03-13 23:01:43

回答

1

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

+0

这是正确的,它节省了字段,但不是代码。所以没有办法在另一端知道如何readObject,谢谢。 – 2011-03-13 22:53:54

2

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

+0

是的,你需要双方的impl类。我不能说其他语言,对不起:-( – corsiKa 2011-03-13 22:52:00

1

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

+0

对,右...愚蠢的问题:D – 2011-03-13 22:52:14

相关问题