Pattern matching instanceof

Viewed 2109

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.

2 Answers

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(..) ..}

This feature is finalized in Java 16 (JEP 394). For the below versions, refer this link to enable this preview feature from IDEs such as IntelliJ, Eclipse, and STS.

Related