2013-07-19 97 views
0

我想枚举从Ruby方面的接口的方法,据我所知,JRuby映射到模块。我可以枚举JRuby中Java接口的实例方法吗?

我认为应该工作:

name = # omitting logic which is currently iterating entries of a jar file 
clazz = name.constantize 
clazz.instance_methods 

如果我打电话instance_methodsEnumerable一些真正的模块,我得到我所看到的记录的方法的完整列表。

同样,如果我叫instance_methodsComparable或由JRuby的特殊处理Collection一些Java接口上,我得到一个名单,但只包括特殊的Ruby方法,并不是所有的方法目前在界面上。

在任何其他接口上调用返回[],这不是特别有用。

我知道我可以下降到java_class并使用Java introspection来获取声明的方法,但我特别想要所有方法的Ruby名称,因为我试图比较jar的内容和运行结果规格,试图找到未经测试的方法。

有没有适当的方法来做到这一点?

回答

0

尝试java_instance_methods关于界面的java_class例如, :

>> Java::JavaLang::CharSequence.java_class.java_instance_methods.map(&:name) 
=> ["toString", "charAt", "length", "subSequence"]