Project coin - список наиболее юзабельных изменений.
1.String в конструкции Switch
С точки зрения чистоты кода - правильнее для этих целей использовать enum.
Но, с другой стороны, никто не мешает вместо строковых литералов в следующем примере использовать строковые константы. Зато, например, при написании юнит-тестов значительно может упроститься наша жизнь.
private User getUserByRole(String userRole) { User newUser = null; switch (userRole) { case "admin": newUser = new Adminisitator(); break; case "manager": newUser = new Manager(); break; default: newUser = new User(); break; } return newUser; }
2. Оператор <> (или в англоязычной версии "diamond operator")
Теперь никто не мешает написать
ListВозможности добавить в список элемент,что имеет тип не Long, нет уже на уровне компиляции.boo = new ArrayList<>();
3. Числовые константы
Помимо всеобщих строковых литералов и констант, для повышения читаемости кода теперь можно прописывать числовые команды в двоичной системе и с подчеркиванием:
int i = 0b11; Long num = 0b11111011010L; long bigCommon = 1000120500L; long bigReadbale= 1_000_120_500L; int iReadable = 0b1000_0000_0000;4. Суффиксы в byte и short
Теперь помимо суффикса для Long, появились суффиксы для других типов.
1) S и s для short;
2) Y и y для byte.
byte b1 = (byte)0x80; byte b2 = 0x80y; byte[] ba1 = {0x7F, (byte)0x80, (byte)0xFF}; byte[] ba2 = {0x7F, 0x80y, 0xFFy};
5. Управление ресурсами
Теперь освобождение ресурсов может производится автоматически (вместо их освобождения в блоке finally, как было ранее):
static String readFirstLineFromFile(String path) throws IOException { try (BufferedReader br = new BufferedReader(new FileReader(path))) { return br.readLine(); } //ресурс закроется автоматически }
Это работает за счет добавления нового интерфейса AutoCloseable в java.lang. При этом интерфейс Closeable находится на уровень ниже, что делает все потоки автозакрываемыми.
6. Пробрасывание исключений и одновременная обработка нескольких исключений сразу
Теперь для обработки всех исключений вместо всего списка искобчений, что может генерировать функция достаточно прописать ключевое слово final и параметр типа Exception:
public void readParams() throws IOException, IllegalAccessException{ try { doSomething(); // выбрасывает IOException, IllegalAccessException } catch (final Exception ex) { logger.log(ex); throw ex; } }
Также добавлен синтаксис для обработки нескольких исключений сразу:
public void readParams2(){ try { doSomething(); // выбрасывает IOException, IllegalAccessException } catch (IOException | IllegalAccessException ex) { logger.log(ex); } }