假设我有一个像这样的Java类:
public class MyClass {
public void doSomething(Object o1) { }
public void doSomething(Object o1, Object o2) {}
}
请注意,有两种doSomething
方法具有不同的arities。
在JRuby中,我如何对这个类进行子类化并为doSomething
的每个arity提供实现?有没有办法在Java中添加一个简单的类来简单地将方法调用路由到具有明确名称的ruby方法?
谢谢!
答案 0 :(得分:1)
在Ruby中,在同一个类中,不能有更多同名的方法。但是,您可能有一个带有变量参数和分派的方法,具体取决于参数的数量,请查看以下文章:http://rubylearning.com/satishtalim/ruby_overloading_methods.html
除了Dave Newton的参考,这是正确的解决方案。 JRuby将具有相同名称的所有Java方法路由到一个Ruby方法。您可以从那里发送任意内容。所以在这种情况下,以下Ruby就足够了:
class MyRubyClass < MyClass
...
def doSomething(*args)
... do something with args ...
end
end
答案 1 :(得分: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