5

leftShift 演算子をオーバーロードしようとしていますが、指定されたパラメーター「その他」が文字列かどうかを確認する方法を知りたいですか?

def leftShift(other){
    if(other.getClass() instanceof String){
        println other.toString() + " is a string!"          
}

しかし、これはうまくいきません..誰も私を助けることができますか?

4

3 に答える 3

13

Javaで通常使用するテストを使用できます。

def leftShift(other) {
    if(other instanceof String) {
        println "$other is a string!"
    }
}

other.getClass()結果クラスを呼び出すと、 String.classと比較できるjava.lang.Classインスタンスになります。テスト「otherinstanceofString」がfalseと評価される場合、otherはnullになる可能性があることに注意してください。

アップデート:

文字列インスタンスではないGroovyGStringインスタンスを作成する単純なケースを次に示します。

def x = "It is currently ${ new Date() }"
println x.getClass().getName()
println x instanceof String
println x instanceof CharSequence

出力:

It is currently Thu Aug 21 15:42:55 EDT 2014
org.codehaus.groovy.runtime.GStringImpl
false
true

GStringImplはGStringを拡張します。このメソッドは、Stringオブジェクトとして動作させ、Stringクラスと同様にCharSequenceインターフェイスを実装します。他のオブジェクトがCharSequenceであるかどうかを確認します。これは、オブジェクトがStringまたはGStringインスタンスである場合にtrueになります。

def leftShift(other) {
    if(other instanceof CharSequence) {
        println "$other is a string!"
    }
}
于 2012-12-14T14:43:48.943 に答える
6

です

if (other.getClass() == String)
于 2012-12-14T11:36:09.820 に答える
1

記述されたコードはコンパイルされません-中括弧がありません。他の人が述べているように、その存在で、instanceofJavaのように動作します。ただし、Groovyでは、実際に表示されることがあるため、instanceofチェックに注意する必要があります(ドキュメントの「GStringは文字列ではない」のセクションを参照してください)。簡単な例:StringStringsGStrings

assert "the quick brown $somevar jumped over the lazy dog" instanceof String == false
于 2012-12-14T14:49:12.903 に答える