0

是否有明确的方法来覆盖 JRuby 子类中的 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 中也很方便,只是程度较小..)

4

1 回答 1

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
于 2013-11-12T17:16:46.740 回答