我必须知道Object
是否是String或任何其他类类型,我该怎么办?目前我这样做如下,但它的编码不是很好。
try {
String myString = (String) object;
// do stuff here
} catch(Exception e) {
// it wasn't string, so just continue
}
答案 0 :(得分:80)
object instanceof Type
如果对象是true
或Type
的子类,则为Type
object.getClass().equals(Type.class)
仅当对象为true
时,才为Type
答案 1 :(得分:21)
使用instanceof
语法。
像这样:
Object foo = "";
if( foo instanceof String ) {
// do something String related to foo
}
答案 2 :(得分:10)
使用instanceof
String myString;
if (object instanceof String) {
myString = (String) object;
}
答案 3 :(得分:2)
使用instanceof
或方法Class.isAssignableFrom(Class<?> cls)
。
答案 4 :(得分:2)
根据你正在做什么,你可能不需要知道。
String myString = object.toString();
或者如果object可以为null
String myString = String.valueOf(object);
答案 5 :(得分:2)
javamonkey79是对的。但是,如果对象不是String的实例,请不要忘记您可能想要做的事情(例如尝试其他事情或通知某人)。
String myString;
if (object instanceof String) {
myString = (String) object;
} else {
// do something else
}
BTW:如果你在上面的代码中使用ClassCastException而不是Exception,你可以确定你将捕获由于将对象转换为String而导致的异常。而不是由其他代码引起的任何其他异常(例如NullPointerExceptions)。
答案 6 :(得分:1)
从包含JEP 305的JDK 14+开始,我们可以为instanceof
做模式匹配
模式基本上测试一个值是否具有某种类型,并且在具有匹配类型时可以从该值中提取信息。
在Java 14之前
if (obj instanceof String) {
String str = (String) obj; // need to declare and cast again the object
.. str.contains(..) ..
}else{
str = ....
}
Java 14增强功能
if (!(obj instanceof String str)) {
.. str.contains(..) .. // no need to declare str object again with casting
} else {
.. str....
}
我们也可以将类型检查和其他条件结合在一起
if (obj instanceof String str && str.length() > 4) {.. str.contains(..) ..}
在instanceof
中使用模式匹配应减少Java程序中显式强制转换的总数。
PS :instanceOf
仅在对象不为null时匹配,然后只能将其分配给str
。
答案 7 :(得分:0)
你能否使用typeof(object)来比较