这会导致java.lang.ClassCastException
错误。我是Java和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))
最后一个语句抛出java.lang.ClassCastException
,声称另一个 java类(InstanceList
)无法转换为ParallelTopicModel
。我没有深入研究java端代码,但我猜测InstanceList
是我尝试阅读的文件中序列化的第一个对象的类型,基于我在代码中看到的编写序列化的内容。
来自IDE的轻微编辑的堆栈跟踪如下所示:
11007:恢复线程#
cc / mallet / topics / ParallelTopicModel.java:1997:在read': java.lang.ClassCastException: cc.mallet.types.InstanceList cannot be cast to cc.mallet.topics.ParallelTopicModel
from java/lang/reflect/Method.java:606:in
调用'
来自/home/tom/RubymineProjects/CaseTagger/baby-jruby.rb:32:in initialize'
from /home/tom/RubymineProjects/CaseTagger/baby-jruby.rb:54:in
(root)'
来自org / jruby / debug / RubyDebugger.java:204:在debug_load'
from org/jruby/RubyKernel.java:1101:in
中加载'
来自/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将其解释为试图将第一个对象的类型转换为序列化。
有什么想法吗?
我尝试了很多利用JRuby能力的东西(例如)调用蒙面和私有方法,强制打字等等。没有用过。我还查看了许多关于使用ObjectInputStream的Java教程(虽然以一种不太知情的方式,因为虽然我不是一个Ruby程序员,但我并不是一个Java程序员在所有)。我得出结论,在这个例子中使用强制转换是JRuby不理解的Java习语:
ObjectInputStream ois = new ObjectInputStream(new FileInputStream(f)); deserializedObjectOfClassBlah =(Blah)ois.readObject();
在Java中使用(Blah)的强制转换的效果是Java要查找并调用私有的Blah.readObject方法。 JRuby中的效果是JRuby尝试输入它在流中找到的第一个非原始对象。
非常欢迎,如果有人遇到并解决了这个问题。我还是想找个解决方案。