Pattern matching instanceof
Asked Answered
D

2

7

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.

Damiondamita answered 21/5, 2020 at 17:10 Comment(3)
Please edit your question. Include the compile time error's full message and what you didn't understand from it. Change your title to reflect the actual issue, not the concepts involved (which can be added as tags).Wheelock
Include the entire error message. Assuming you're compiling this in Intellij, the message continues in both the "Quick Fixes" subtab and in the "Build" window. If you're not compiling in Intellij, include the entire error message you're seeing from javac or the entire error message you're seeing in Eclipse (or whatever else compiler you're using).Wheelock
I never compiled it originally otherwise I would have known the actual cause lolDamiondamita
S
19

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.

Shawndashawnee answered 21/5, 2020 at 17:14 Comment(0)
E
4

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.

Emmet answered 23/10, 2021 at 5:37 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.