2013-08-21 38 views
1

我有一個繼承自java類(例如java.util.HashMap)的JRuby類。第三方java代碼正在調用類的java實例的getClass()類型上的反射方法,如getDeclaredMethods()。我需要將我的ruby類(HM)中定義的方法推送到這些「聲明的方法」中,然後將其轉換爲java,以便它們顯示在第三方Java類中。任何人都知道方法?這裏是我的jruby代碼:添加到jruby類的getDeclaredMethods()

require 'java' 
class HM < java.util.HashMap; end 

hm = HM.new 
puts hm.getClass() 
    # => org.jruby.proxy.java.util.HashMap$ProxyO 

# a third party will make the following call: 
puts hm.getClass().getDeclaredMethods().count 
    # => 2 methods 

HM.class_eval do ; def value_at_key(key); return self[key]; end; end 

puts hm.getClass().getDeclaredMethods().count 
    # => still 2 methods 

回答

1

也許這個bug目前正在阻止你? http://jira.codehaus.org/browse/JRUBY-6105

有兩種創建Java類https://github.com/jruby/jruby/wiki/GeneratingJavaClasses

我都試過的方式和我得到如錯誤描述零兩種方式。

這個問題是類似的Can I define a Java subclass in ruby, then instantiate it in Java?

+0

謝謝,可能是這樣。我使用了你發佈的鏈接,嘗試了同樣的解決方案,並遇到了奇怪的問題 - 在這種情況下,它似乎沒有認識到VBox代理(來自javafx)是一個有效的參數。我會試着看看我能否得到這個工作,或者看看我是否不能重新打開聲明方法返回的數組(完全破解,但我仍然接受建議......)。 'class Controller ' – inyourcorner

+0

>上添加了參數(org.jruby.proxy.javafx.scene.layout.VBox $ Proxy2)的方法'rubyToJava'我在問題中添加了一些說明基於類似帖子的反饋。 – inyourcorner