Reputation: 24635
I have to know if Object
is String or any other class type, how can I do it? Currently I do it like below, but its not very good coding.
try {
String myString = (String) object;
// do stuff here
} catch(Exception e) {
// it wasn't string, so just continue
}
Upvotes: 70
Views: 200169
Reputation: 1665
From JDK 14+ which includes JEP 305 we can do Pattern Matching for instanceof
Patterns basically test that a value has a certain type, and can extract information from the value when it has the matching type.
Before Java 14
if (obj instanceof String) {
String str = (String) obj; // need to declare and cast again the object
.. str.contains(..) ..
}else{
str = ....
}
Java 14 enhancements
if (!(obj instanceof String str)) {
.. str.contains(..) .. // no need to declare str object again with casting
} else {
.. str....
}
We can also combine the type check and other conditions together
if (obj instanceof String str && str.length() > 4) {.. str.contains(..) ..}
The use of pattern matching in instanceof
should reduce the overall number of explicit casts in Java programs.
PS: instanceOf
will only match when the object is not null, then only it can be assigned to str
.
Upvotes: 4
Reputation: 929
javamonkey79 is right. But don't forget what you might want to do (e.g. try something else or notify someone) if object is not an instance of String.
String myString;
if (object instanceof String) {
myString = (String) object;
} else {
// do something else
}
BTW: If you use ClassCastException instead of Exception in your code above, you can be sure that you will catch the exception caused by casting object to String. And not any other exceptions caused by other code (e.g. NullPointerExceptions).
Upvotes: 2
Reputation: 8722
Guard your cast with instanceof
String myString;
if (object instanceof String) {
myString = (String) object;
}
Upvotes: 13
Reputation: 533530
Its possible you don't need to know depending on what you are doing with it.
String myString = object.toString();
or if object can be null
String myString = String.valueOf(object);
Upvotes: 1
Reputation: 114787
object instanceof Type
is true
if the object is a Type
or a subclass of Type
object.getClass().equals(Type.class)
is true
only if the object is a Type
Upvotes: 134
Reputation: 12006
Either use instanceof
or method Class.isAssignableFrom(Class<?> cls)
.
Upvotes: 2
Reputation: 17775
Use the instanceof
syntax.
Like so:
Object foo = "";
if( foo instanceof String ) {
// do something String related to foo
}
Upvotes: 30