I came across this amazing topic on https://www.baeldung.com/java-pattern-matching-instanceof. But when I try to run the following code, it throws compile time error:
if(obj instanceof String s) {
System.out.println(s);
}
The error says:
Patterns in 'instanceof' are not supported at language level '14'
Error:(36, 34) java: pattern matching in instanceof is a preview feature and is disabled by default. (use --enable-preview to enable pattern matching in instanceof)
But I have Java 14 installed.
This is a preview feature in Java 14, see JEP 305 and JEP 375. To enable this, compile your class with:
javac MainClass.java --enable-preview --release 14
And now you can do:
java MainClass --enable-preview
Example of instanceof
:
Object o = "Hello World!";
if (o instanceof String s) {
// no explicit type casting
s = s.replaceFirst("World", "Java"); // No compile time issues
System.out.println(s);
}
Another example copied from JEP:
if (obj instanceof String s && s.length() > 5) {.. s.contains(..) ..}
Since Java 16 the "Pattern Matching for instanceof" is a fully finalized feature (i.e. not a preview anymore). So when using Java 16 or newer there is no need to separately enable this feature as it will be enabled out of the box.
See JEP-394 for the details.