我在从jruby类覆盖Java方法时遇到了一些麻烦。由于JRuby公开了同时使用驼峰和蛇格语法的Java方法,因此我尝试了两种方法来覆盖相同的方法,但结果却很奇怪:
爪哇
package tabaqui;
class MyJavaClass {
public void myMethod() {
System.out.println("Java method");
}
public void invokeMyMethod() {
myMethod();
}
}
红宝石
class MyRubyClass1 < Java::tabaqui.MyJavaClass
def my_method
puts "Ruby method from MyRubyClass1\n";
end
end
class MyRubyClass2 < Java::tabaqui.MyJavaClass
def myMethod
puts "Ruby method from MyRubyClass2\n";
end
end
a = MyRubyClass1.new
a.my_method #output: "Ruby method from MyRubyClass1"
a.invoke_my_method #output: "Java method"
b = MyRubyClass2.new
b.my_method #output: "Java method"
b.invoke_my_method #output: "Ruby method from MyRubyClass2"
我发现获得预期结果(在每种情况下都调用红宝石方法)的唯一解决方案是在ruby中定义覆盖的方法后为其指定别名:
alias_method :myMethod, :my_method
难道我做错了什么?
萧十郎
相关分类