0

我正在尝试从 Ruby 端枚举接口的方法,据我所知,JRuby 映射到模块。

我认为应该工作:

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

如果我调用instance_methods一些真正的模块,例如Enumerable,我会得到我看到记录的所有方法的完整列表。

同样,如果我调用一些类似 JRuby或被JRuby 特殊处理的instance_methodsJava 接口,我会得到一个列表,但它只包括特殊的 Ruby 方法,而不是接口上存在的所有方法。ComparableCollection

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

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

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

4

1 回答 1

0

试一下java_instance_methods界面java_class,例如:

>> Java::JavaLang::CharSequence.java_class.java_instance_methods.map(&:name)
=> ["toString", "charAt", "length", "subSequence"]
于 2013-07-23T16:26:37.423 回答