Недавно вышла новая версия java с большим количеством нововведений и полезных фич. Описания новых возможностей в рунете не так много, поэтому и родилась статья.
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 boo = new ArrayList<>();
Возможности добавить в список элемент,что имеет тип не Long, нет уже на уровне компиляции.
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);
}
}