是否有明确的方法来覆盖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中也很方便,在较小程度上也是如此。)
答案 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