2011-10-07 97 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