string - 我可以重新定义 String#length 吗?

标签 string groovy

我想重新实现一个 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/

相关文章:

java - 压缩/缩小/优化 groovy-all、groovy 2.0.1 进行分发?

Groovy 作为列表问题

Java编码/解码一个字符串到/从一个长

Swift UTF8 编码和非 UTF8 字符

python - 为什么打印返回\\,而不是 Python 中的转义字符\

Java字符串包含函数?

c# - 返回赋值表达式

java - Java grails:无法将类 'Mon Feb 12 00:00:00 PKT 2018'的对象 'java.util.Date'强制转换为类 'org.joda.time.LocalDate'

java - 如何在 groovy 中声明方法引用?

arrays - 在 Java/Groovy 中将数组转换为字符串