Экземпляр сопоставления с образцом

Я наткнулся на эту удивительную тему на https://www.baeldung.com/java-pattern-matching-instanceof. Но когда я пытаюсь запустить следующий код, возникает ошибка времени компиляции:

      if(obj instanceof String s) {
    System.out.println(s);
}

Ошибка говорит:

Шаблоны в instanceof не поддерживаются на уровне языка 14

Ошибка:(36, 34) java: сопоставление с образцом в instanceof является функцией предварительного просмотра и по умолчанию отключено. (используйте --enable-preview, чтобы включить сопоставление с образцом в instanceof)

Но у меня установлена ​​Java 14.

2 ответа

Решение

Это предварительная функция в Java 14, см. JEP 305 и JEP 375 . Чтобы включить это, скомпилируйте свой класс с помощью:

      javac MainClass.java --enable-preview --release 14

И теперь вы можете:

      java MainClass --enable-preview

Пример 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);
}

Другой пример скопирован из JEP:

      if (obj instanceof String s && s.length() > 5) {.. s.contains(..) ..}

Эта функция завершена в Java 16 (JEP 394). Для следующих версий перейдите по этой ссылке, чтобы включить эту функцию предварительного просмотра в IDE, таких как IntelliJ, Eclipse и STS.

Другие вопросы по тегам