经过半天的尝试,以及网上搜索,可以确定。jruby1.6.4(目前的最新版)只支持受限制的monkey patch,即如果你想修改java的类,那么这个修改只在jruby中是可见的,对于java来说不可见。
举例:
把下面的脚本嵌入java运行:
但是,覆盖后的那个方法不会被调用。
也许,是我没有找到正确方法。请大家指教。
举例:
把下面的脚本嵌入java运行:
require 'java'
import org.jdom.input.SAXHandler
class SAXHandler
def startPrefixMapping(prefix, url)
print 'override called'
end
end
#这里试图调用通过SAXBuilder来再次调用SAXHandler的startPrefixMapping方法
builder = org.jdom.input.SAXBuilder.new()
doc = builder.build('test.xml')
但是,覆盖后的那个方法不会被调用。
也许,是我没有找到正确方法。请大家指教。
本文探讨了使用JRuby 1.6.4版本进行Monkeypatch的局限性,特别指出对Java类的修改仅在JRuby环境中可见,而不影响原生Java。通过一个具体的示例展示了即使重写了Java方法,在特定条件下该重写也可能不会被调用。
221

被折叠的 条评论
为什么被折叠?



