我想重新实现一个 Java 类的方法。例如,对于 "hi".length()
返回 4
. (我怎样才能做到这一点?
我知道使用 SomeClass.metaClass 我可以获得对现有方法的引用并定义新的(或覆盖)方法,但我似乎无法为现有的 Java 方法做到这一点。
最佳答案
使用 Groovy,您可以用自己的实现替换任何方法(甚至是最终类的方法)。 Groovy 中的方法替换使用元对象协议(protocol),而不是继承。
这是您要求的示例,即如何制作 String.length()
总是返回 4
// Redefine the method
String.metaClass.invokeMethod = { name, args ->
def metaMethod = delegate.metaClass.getMetaMethod(name, args)
def result = metaMethod.invoke(delegate, args)
name == 'length' ? 4 : result
}
// Test it
assert "i_do_not_have_4_chars".length() == 4
关于string - 我可以重新定义 String#length 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3548237/