Экземпляр сопоставления с образцом
Я наткнулся на эту удивительную тему на 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(..) ..}