我即将重载leftShift运算符并想知道如何检查给定参数“other”是否为String?
def leftShift(other){
if(other.getClass() instanceof String){
println other.toString() + " is a string!"
}
但这不起作用..有人可以帮助我吗?
我即将重载leftShift运算符并想知道如何检查给定参数“other”是否为String?
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实例。注意other可以为null,其中测试“other instanceof String”的计算结果为 false。
更新:
这是一个简单的案例,它创建了一个不是字符串实例的 Groovy GString实例:
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!"
}
}
It is
if (other.getClass() == String)
编写的代码无法编译-您缺少大括号。就目前而言,instanceof
正如其他人所提到的,它可以像在 Java 中一样工作。但是,在 Groovy 中,我会小心检查instanceof
,String
因为有时看起来确实如此Strings
(GStrings
请参阅文档,“GStrings are not Strings”部分)。快速示例:
assert "the quick brown $somevar jumped over the lazy dog" instanceof String == false