Для тех кто пропустил релиз Java 25 - смотрим топ-3 новых синтаксических фичи:
1. короткий мейн и класс IO
// в файле Example.java
void main() {
IO.println("Привет пацаны");
}
Это буквально весь код который надо будет написать в файле Example.java для простого hello-world приложения.
Т.е.:
- не надо объявлять класс
- вместо
System.out.println можно будет использовать класс IO. sout у нас никто не отнимет, обратная совместимость все-таки, но альтернатива появилась2. гибкие конструкторы с возможностью вызова кода до super()/this()
class TestUser {
private final String login;
TestUser(String login) {
// раньше нельзя было писать код ДО явного super()/this(), как например эту проверку
if (login == null || login.isBlank()) {
throw new IllegalArgumentException("Логин не может быть пустым!");
}
super();
this.login = login;
}
}Дергать до super()/this() можно только "безопасные" операции, т.е. те, которые не связаны как-то с родительскими полями/методами/состоянием (все-таки раз
super еще не был вызван). Какая задача решается этой фичей в примере выше? Представьте что до этой фичи Java вы не могли запихнуть валидацию параметра конструктора ДО вызова всей цепочки конструкторов родительских классов. Но если параметр херня то зачем тратить силы jvm на создание всех родителей? Надо быстрее и дешевле - дать возможность отфутболить исключение сразу. В реал жизни все шире чем валидация аргументов до super(), но это один из кейсов.3. примитивы в instanceof и switch
Object value = 42;
switch (value) {
case int i when i > 100 -> System.out.println("Огромное число: " + i);
case int i -> System.out.println("Обычное число: " + i);
case String s -> System.out.println("Это строка: " + s);
default -> System.out.println("Хрен пойми что: " + value);
}
Раньше нельзя было использовать в свиче/инстансоф примитивы, а теперь можно. Удобно что можно передать переменную (как тут value) и пощупать-узнать какая она, вне зависимости от того примитивная или ссылочная, без лишних приседаний.
🔥 - крутяк, тащу в прод
🗿 - спасибо, не впечатлен, живу дальше с родной Java 8
