leftShift 演算子をオーバーロードしようとしていますが、指定されたパラメーター「その他」が文字列かどうかを確認する方法を知りたいですか?
def leftShift(other){
if(other.getClass() instanceof String){
println other.toString() + " is a string!"
}
しかし、これはうまくいきません..誰も私を助けることができますか?
leftShift 演算子をオーバーロードしようとしていますが、指定されたパラメーター「その他」が文字列かどうかを確認する方法を知りたいですか?
def leftShift(other){
if(other.getClass() instanceof String){
println other.toString() + " is a string!"
}
しかし、これはうまくいきません..誰も私を助けることができますか?
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!"
}
}
です
if (other.getClass() == String)
記述されたコードはコンパイルされません-中括弧がありません。他の人が述べているように、その存在で、instanceof
Javaのように動作します。ただし、Groovyでは、実際に表示されることがあるため、instanceof
チェックに注意する必要があります(ドキュメントの「GStringは文字列ではない」のセクションを参照してください)。簡単な例:String
Strings
GStrings
assert "the quick brown $somevar jumped over the lazy dog" instanceof String == false