维基百科的 current article关于 Groovy 编程语言的解释是“大多数有效的 Java 文件也是有效的 Groovy 文件”,并给出了以下示例,首先是 Java 代码:
for (String it : new String[] {"Rod", "Carlos", "Chris"})
if (it.length() <= 4)
System.out.println(it);
然后在 Groovy 中也是如此:
["Rod", "Carlos", "Chris"].findAll{it.size() <= 4}.each{println it}
请注意,在第一个示例中,我们使用了非常普通的 Java 方法 java.lang.String.length() .在第二个示例中,此方法被神秘地替换为对名为 size()
的方法的调用。我有 verified第二个示例是有效的 Groovy 代码并且具有正确的行为。
java.lang.String
没有名为 size()
的方法。 Groovy 不会出于自己的目的将 String
子类化:
String s = ""
Class c = s.getClass()
println c.getName() // "java.lang.String"
它也不会以某种方式向 String
对象添加额外的方法:
// [...]
for (def method : c.getMethods()) {
println method.getName()
}
// prints a whole bunch of method names, no "size"
但这段代码仍然可以正常工作:
// [...]
println s.size() // "0"
我找不到任何 Groovy 文档来解释这一点。
size()
从何而来?- 为什么它没有出现在对象上?
- 为什么添加它?
length()
有什么问题,为什么不推荐使用它?java.lang.String
添加了哪些其他方法?- 其他标准类呢?
最佳答案
Groovy 为字符串和各种其他类添加了许多方法。所有的便利方法都是 Groovy 之所以伟大的部分原因。
java.lang.String
实现了 java.lang.CharSequence
,这就是它获得全部(大部分)魔力的地方。 size()
, 例如。 Groovy 向大多数对象添加了一个 size()
方法,这些对象可能具有您认为的大小,以便您可以全面使用一致的方法。 length()
仍然完全有效,Groovy 不会删除它。
要查看 Groovy 添加的一些方法,请查看 GDK ,特别是 CharSequence和 Collection .
关于java - 为什么 Groovy 用 size() 替换 java.lang.String.length()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31433991/