2011-10-07 82 views
1

比方說,我有一個Java類是這樣的:重寫重載的Java方法JRuby中

public class MyClass { 
    public void doSomething(Object o1) { } 
    public void doSomething(Object o1, Object o2) {} 
} 

注意,有兩種方法doSomething不同arities。

在JRuby中,我該如何對這個類進行子類別劃分,併爲doSomething的每個元素提供實現?有沒有辦法做到這一點,在Java中添加一個shim類,只需將方法調用路由到具有明確名稱的ruby方法?

謝謝!

+0

java_signature方法是爲此工作還是僅用於編譯? (對不起,目前無法檢查:( –

回答

1

在Ruby中,您不能在同一個類中擁有更多的同名方法。但是,根據參數的數量,您可能有一個帶有可變參數和調度的方法,請查看本文:http://rubylearning.com/satishtalim/ruby_overloading_methods.html

與戴夫牛頓的參考一起,這是正確的解決方案。 JRuby將所有具有相同名稱的Java方法路由到一個Ruby方法。你可以從那裏發送你喜歡的東西。所以在這種情況下,下面的Ruby是足夠了:

class MyRubyClass < MyClass 

    ... 

    def doSomething(*args) 
    ... do something with args ... 
    end 
end 
+1

那麼... http://www.ruby-forum.com/topic/216636 –

1

https://github.com/jruby/jruby/wiki/CallingJavaFromJRuby

尤其是看java_send,使用它可以指定Java方法調用。

obj = MyClass.new 
obj.java_send :doSomething, [Java::Object], o1 
obj.java_send :doSomething, [Java::Object, Java::Object], o1, o2 
+1

OP不是試圖調用Java方法,而是在JRuby子類中重載。 –

+0

我現在看到OP在說什麼,謝謝你指出了。 – banzaiman