莊周夢蝶

          生活、程序、未來
             :: 首頁 ::  ::  :: 聚合  :: 管理

          JRuby中調用java帶可變參數的方法

          Posted on 2008-06-14 22:39 dennis 閱讀(2185) 評論(1)  編輯  收藏 所屬分類: 動態語言
              今天同事遇到的問題,用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.new
          t.hello(
          "dennis",[].to_java("Echo"))
          e1
          =Echo.new
          t.hello(
          "dennis",[e1].to_java("Echo"))
          e2
          =Echo.new
          t.hello(
          "dennis",[e1,e2].to_java("Echo"))



          評論

          # re: JRuby中調用java帶可變參數的方法  回復  更多評論   

          2008-06-17 14:10 by dennis
          @Jack.Wang
          如果我回罵的話,那還真把你當人看了
          主站蜘蛛池模板: 武安市| 三河市| 鹤庆县| 翼城县| 木兰县| 海阳市| 晋州市| 潼南县| 页游| 临澧县| 久治县| 新民市| 铜鼓县| 榕江县| 黄陵县| 普兰县| 陆川县| 邵东县| 石渠县| 大邑县| 灵武市| 长春市| 西吉县| 岑巩县| 兴化市| 博湖县| 蒲城县| 贺州市| 梅河口市| 阿拉尔市| 民勤县| 五莲县| 花莲市| 临颍县| 武清区| 五原县| 长葛市| 自贡市| 巴青县| 成安县| 常熟市|