2017-06-17 52 views
0

我有一個Java類的重載的方法類似以下:如何從JRuby中調用重載Java函數與數組參數

public class Main { 
    public void print(Object o) { 
     System.out.println("printing object..."); 
    } 

    public void print(Object[][] o) { 
     System.out.println("printing matrix..."); 
    } 
} 

現在我想的JRuby調用print(Object[][])如果參數是兩維陣列,像這樣:

m = Main.new 
m.print 123 
m.print [[1,2],[3]] 

但輸出是:

printing object... 
printing object... 

所以jruby正在調用print(Object)忽略數組類型。我如何讓jruby電話print(Object[][])

回答

0

爲了處理多義性的Java函數可以調用這樣的:

m.java_send :print, [java.lang.Object], [["test"]]  #=> printing object... 
m.java_send :print, [java.lang.Object[][]], [["test"]] #=> printing matrix... 

第一個參數是方法名作爲一個符號,第二個參數是參數類型的陣列,並且所有下列參數是傳遞給java函數。

來源:https://github.com/jruby/jruby/wiki/CallingJavaFromJRuby#calling-masked-or-unreachable-java-methods-with-java_send