Java JRuby:反序列化输入流中的数据类型引发强制转换错误

Java JRuby:反序列化输入流中的数据类型引发强制转换错误,java,serialization,casting,jruby,Java,Serialization,Casting,Jruby,这将导致java.lang.ClassCastException错误。我对Java和JRuby都是新手,这对我的机会没有帮助 java端代码(简化) jruby端代码 最后一条语句抛出一个java.lang.ClassCastException,声称另一个java类(InstanceList)不能强制转换为ParallelTopicModel)。我还没有深入研究java端代码,但我猜测,InstanceList是我试图读取的文件中序列化的第一个对象的类型,基于我在编写序列化的代码中看到的内容 从

这将导致
java.lang.ClassCastException
错误。我对Java和JRuby都是新手,这对我的机会没有帮助

java端代码(简化) jruby端代码 最后一条语句抛出一个
java.lang.ClassCastException
,声称另一个java类(
InstanceList
)不能强制转换为
ParallelTopicModel
)。我还没有深入研究java端代码,但我猜测,
InstanceList
是我试图读取的文件中序列化的第一个对象的类型,基于我在编写序列化的代码中看到的内容

从我的IDE中轻松编辑的堆栈跟踪如下所示:

11007:恢复线程# cc/mallet/topics/ParallelTopicModel.java:1997:in
read':java.lang.ClassCastException:cc.mallet.types.InstanceList不能强制转换为cc.mallet.topics.ParallelTopicModel
来自java/lang/reflect/Method.java:606:in
invoke' from/home/tom/RubymineProjects/casetager/baby jruby.rb:32:in
initialize'
from/home/tom/RubymineProjects/casetager/baby jruby.rb:54:in
(root)' 来自org/jruby/debug/rubydebuger.java:204:in
debug\u load'
来自org/jruby/RubyKernel.java:1101:in
load' from/home/tom/.rvm/gems/jruby-1.7.11/gems/ruby-debug-ide-0.4.23.beta1/bin/rdebug-ide:110:in`(root)'

我用to_java及其同类软件尝试了许多JRuby-ish技巧,但问题似乎在于返回的数据类型。Java代码(显然)不是我的,我当然不是Java程序员,但看起来强制转换的目的似乎是强制使用ParallelTopicModel的readObject方法,但Jruby将其解释为试图将第一个对象的类型强制转换出序列化

有什么想法吗

(1周后)似乎是一个JRuby问题 我已经尝试了许多利用JRuby的能力(例如)调用掩码和私有方法、强制键入等的方法,但都没有成功。我还浏览了一些关于ObjectInputStream使用的Java教程(尽管信息不多,因为我不是一个Ruby程序员,但我根本不是一个Java程序员)。我得出的结论是,在这个示例中使用强制转换是JRuby不理解的Java习惯用法:

ObjectInputStream ois=新ObjectInputStream(新文件InputStream(f)); 反序列化ObjectOfClassBlah=(Blah)ois.readObject()

Java中的cast using(Blah)的作用是让Java查找并调用私有的Blah.readObject方法。JRuby中的效果是JRuby尝试对它在流中找到的第一个非基本对象进行类型转换


如果有人遇到并解决了这个问题,我们非常欢迎您的想法。我仍然想找到一个解决方案。

您是否可以发布整个堆栈跟踪,并指定它发生在哪一行?谢谢,但请使用堆栈跟踪编辑您的问题,而不是写评论。
public ParallelTopicModel implements Serializable {
    private void readObject (ObjectInputStream in) throws IOException, ClassNotFoundException          {
      ... bunch of stuff deserializing objects ...
    }

public static ParallelTopicModel read (File f) throws Exception {
    ParallelTopicModel goodThing = null;
    ObjectInputStream ois = new ObjectInputStream (new FileInputStream(f));
    goodThing = (ParallelTopicModel) ois.readObject();
    ois.close();
    return goodThing;
    }
}
my_jruby_object = ParallelTopicModel::read(java.io.File.new(some_filename))