天天看點

JRuby中調用java帶可變參數的方法(轉載)

今天同僚遇到的問題,用JRuby調用一個java方法,該方法使用了jdk1.5的可變參數。我一開始以為隻要簡單地将可變參數表示為數組即可,例如下面的兩個java類:

我想在jruby中調用Test的hello方法,該方法有個可變參數args。所謂可變參數經過編譯後其實也就是數組,這個可以通過觀察位元組碼知道,那麼如果用數組來調用可以不?

t.hello("dennis",[]) #報錯,類型不比對 很遺憾,這樣調用是錯誤的,原因如上面的注釋。具體到類型不比對,本質的原因是JRuby中的數組與java中對數組的位元組碼表示是不一緻的,JRuby中的數組是用org.jruby.RubyArray類來表示,而hello方法需要的數組卻是是[LEcho。解決的辦法就是将JRuby的數組轉成java需要的類型,通過to_java方法,因而下面的調用才是正确的,盡管顯的麻煩: