我正在创建一个具有 JDI 绑定的 jruby 库,但是在调用 java 方法时,我得到了一些奇怪的对象不一致,这些不一致不允许我调用某些方法。
new_value = @vm.mirrorOf(value)
puts("New Value: #{new_value.class}")
puts("Variable: #{variable.java_value.class}")
object_reference.setValue(variable.java_value, new_value)
输出:
New Value: Java::ComSunToolsJdi::StringReferenceImpl
Variable: Java::ComSunToolsJdi::StringReferenceImpl
TypeError: cannot convert instance of class org.jruby.java.proxies.ConcreteJavaProxy to interface com.sun.jdi.Field
set_value at /Users/wuntee/Google Drive/workspace/android_debug/lib/android_debug/event.rb:85
(root) at hello_world.rb:14
call at org/jruby/RubyProc.java:249
on_break at /Users/wuntee/Google Drive/workspace/android_debug/lib/android_debug/debugger.rb:94
go at /Users/wuntee/Google Drive/workspace/android_debug/lib/android_debug/debugger.rb:63
(root) at hello_world.rb:18
因此,在 setValue 调用中,其中一个参数被强制转换为 ConcreteJavaProxy。有没有办法强迫他们保持原来的类型?我觉得这是我不理解的核心 JRuby 细微差别。任何帮助,将不胜感激。谢谢。