Wikipediaの 現在の記事 は、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() を使用していることに注意してください。2番目の例では、このメソッドは不可解に置き換えられていますsize()
と呼ばれるメソッドを呼び出して、2番目の例が有効なGroovyコードであり、正しい動作をしていることを verified しています。
_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 を確認してください。 。
Groovyクラスのドキュメント StringGroovyMethods
をお読みになることをお勧めします。Groovyでどのように機能するかを簡単に説明しています。
静的メソッドは、最初のパラメーターを宛先クラスとして使用します。たとえば、public static String reverse(String self)は、Stringのreverse()メソッドを提供します。