1

我正在创建一个具有 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 细微差别。任何帮助,将不胜感激。谢谢。

4

0 回答 0