我怎么知道Object是否是String类型对象?

时间:2010-12-03 11:00:44

标签: java

我必须知道Object是否是String或任何其他类类型,我该怎么办?目前我这样做如下,但它的编码不是很好。

try {
    String myString = (String) object;
    // do stuff here
} catch(Exception e) {
    // it wasn't string, so just continue
}

8 个答案:

答案 0 :(得分:80)

 object instanceof Type
如果对象是trueType

的子类,则

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)来比较