user13120093
user13120093

Reputation:

Pattern matching instanceof

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.

Upvotes: 7

Views: 8895

Answers (2)

Aniket Sahrawat
Aniket Sahrawat

Reputation: 12937

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

UPDATE

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.

Upvotes: 19

Praj
Praj

Reputation: 704

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.

Upvotes: 4

Related Questions