添加到jruby类的getDeclaredMethods()

时间:2013-08-21 22:24:26

标签: java jruby

我有一个JRuby类,它继承自java类(例如java.util.HashMap)。第三方java代码在我的类的java实例的getDeclaredMethods()类型上调用getClass()之类的反射方法。我需要将我的ruby类(HM)中定义的方法推入这些“声明的方法”,然后才能将它转换为java,这样它们就会出现在第三方java类中。有人知道吗?这是我的jruby代码:

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 个答案:

答案 0 :(得分:1)

也许这个bug目前阻止了你? http://jira.codehaus.org/browse/JRUBY-6105

有两种方法可以创建java类https://github.com/jruby/jruby/wiki/GeneratingJavaClasses

我已经尝试了两种方法,并且正如bug中所描述的那样变为零。

这个问题类似于Can I define a Java subclass in ruby, then instantiate it in Java?