在Jruby中显式覆盖Java方法?

时间:2013-10-28 17:46:20

标签: java ruby interop jruby jruby-java-interop

是否有明确的方法来覆盖JRuby-subclass中的Java方法?

public class Yours {
  public String hi() { 
     return "Hello original";
  }
}

在Java中,我使用@override来明确子类化。

public class Mine extends Yours {
  @Override   // throws an error if the above is not a superclass method
  public String hi() { 
     return "Hello override!";
  }
}

当我在Jruby中覆盖它时,我想要这样的东西:

class JRMine < Yours 
   java_overrides     # I wish this was there, making sure "wiring" is ok
   def hi()
     "Hello Jruby"
   end
end

现在,有没有相同的技术来实现安全覆盖? 由于仅仅依赖于方法命名,它似乎可以避免java集成中的一些难以跟踪的错误。

(实际上我发现它在Ruby中也很方便,在较小程度上也是如此。)

1 个答案:

答案 0 :(得分:1)

更新:现已打包到gem 'overrides' https://github.com/kares/overrides

通过一些元编程,可以使用Ruby方法(并且可以使用JRuby,因为Java继承的方法显示为Ruby方法)...我已经把它放在一个要点:

https://gist.github.com/kares/7434811 ...现在有人发现它很有用可能会把它放在一个宝石中:)

用法示例(注意:您不需要为所有类/模块连接它)JRuby样式:

Object.extend Override

class JList < java.util.ArrayList

  override
  def trim_to_size; super; end

  def isEmpty; false; end

  override :isEmpty

end