首页 / RUBY / java-JRuby调用了错误的方法
java-JRuby调用了错误的方法
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java-JRuby调用了错误的方法,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1554字,纯文字阅读大概需要3分钟。
内容图文
从JRuby调用Java方法时遇到一个奇怪的问题.
在我的Java类中,这些方法定义了两次,看来JRuby调用了错误的方法.
所以我尝试使用java_method,但是我总是得到:
TypeError: cannot convert instance of class org.jruby.RubyModule to class java.lang.Class
这是我的Java代码:
public class Renderer {
...
public void addRenderer(IElementRenderer r) {
System.out.println("Added element render: " + r.getClass().toString());
basicRenderers.add(r);
rendererMap.put(r.elementClass(), r);
}
public void addRenderer(IBasicRenderer r) {
System.out.println("SHOULD NOT GO THERE !!");
basicRenderers.add(r);
}
}
和我的JRuby代码:
add_renderer = renderer.java_method :add_renderer, [Java::dragon.render.IElementRenderer]
add_renderer.call TextRenderer.new
我也尝试了java_send,但是出现了同样的错误:
renderer.java_send(:add_renderer, [Java::dragon.render.IElementRenderer], TextRenderer.new)
接下来,我尝试了:
renderer.add_renderer(TextRenderer.new.to_java(IElementRenderer))
这次没有错误,但是调用了错误的方法…
我该如何解决这个问题?
解决方法:
您可以修复无法使用java.lang.Class.for_name将org.jruby.RubyModule类的实例转换为类java.lang.Class的问题
在你的情况下
add_renderer = renderer.java_method :add_renderer, [java.lang.Class.for_name("dragon.render.IElementRenderer")]
这是因为Java接口默认情况下成为Ruby模块,而:java_method的第二个参数需要Class对象的数组.
您可以打印匹配的方法以查看它是否与预期的方法匹配.
例如,我看到以下代码与System.out上的println(String)匹配.
>>java.lang.System.out.java_method "println", [java.lang.Class.for_name("java.lang.String")]
#<Method: Java::JavaIo::PrintStream#(java.lang.String)>
内容总结
以上是互联网集市为您收集整理的java-JRuby调用了错误的方法全部内容,希望文章能够帮你解决java-JRuby调用了错误的方法所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。