|
JRuby中调用java带可变参数的方法
作者无: 加入时间:2008-11-21 17:22:38 点击次数:4 次今天同事遇到的问题,用JRuby调用一个java方法,该方法使用了jdk1.5的可变参数。我一开始以为只要简单地将可变参数表示为数组即可,例如下面的两个java类:public class Echo{public void echo(String name){System.out.println(name);}}public class Test{public void hello(String name,Echoargs){System.out.println("hello,"+name);for(Echo e:args){e.echo(name);}}} 我想在jruby中调用Test的hello方法,该方法有个可变参数args。所谓可变参数经过编译后其实也就是数组,这个可以通过观察字节码知道,那么如果用数组来调用可以不?require ’java’require ’test.jar’include_class ’Test’include_class ’Echo’t.hello("dennis") #报错,参数不匹配 t.hello("dennis",[]) #报错,类型不匹配 很遗憾,这样调用是错误的,原因如上面的注释。具体到类型不匹配,本质的原因是JRuby中的数组与java中对数组的字节码表示是不一致的,JRuby中的数组是用org.jruby.RubyArray类来表示,而hello方法需要的数组却是是[LEcho。解决的办法就是将JRuby的数组转成java需要的类型,通过to_java方法,因而下面的调用才是正确的,尽管显的麻烦:require ’java’require ’test.jar’include_class ’Test’include_class ’Echo’t=Test.newt.hello("dennis",[].to_java("Echo"))e1=Echo.newt.hello("dennis",[e1].to_java("Echo"))e2=Echo.newt.hello("dennis",[e1,e2].to_java("Echo")) 上一篇: Java对象序列化所引起的循环引用的思考 下一篇: 关于Java文件路径问题 |
|||||||||||||||||||||||||||||||||||||||
| 关于我们 | 代理申请 | 付款方式 | 客户管理 | 友情链接 | 网站导航 |
| 版权所有 2008 三易网络(洛阳)科技开发有限公司 服务热线:0379-63921200 63265368(洛阳) 0371-63653120(郑州) QQ在线客服: 总部地址:纱厂南路41号中泰新城泰华苑12楼B座 郑州分公司地址:金水区圣菲城 |