我有一个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
答案 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?