Изучаем Java EE 7 | страница 19
Строковый оператор
До появления Java SE 7 в качестве оператора ветвления могли использоваться только числа (типов byte, short, int, long, char) или перечисления. Теперь стало возможным применять переключатель с цифро-буквенными значениями Strcompare. Это помогает избежать длинных списков, начинающихся с if/then/else, и сделать код более удобочитаемым. Теперь вы можете использовать в своих приложениях код, показанный в листинге 1.6.
>Stringaction = "update";
>switch (action) {
>··case "create":
>····create();
>····break;
>··case "read":
>····read();
>····break;
>··case "udpate":
>····udpate();
>····break;
>··case "delete":
>····delete();
>····break;
>··default:
>····noCrudAction(action);
>}
Ромбовидная нотация
Дженерики впервые появились в Java SE 5, но синтаксис их был достаточно пространным. В Java SE 7 появился более лаконичный синтаксис, называемый ромбовидным. В таком варианте записи объявление объекта не повторяется при его инстанцировании. Листинг 1.7 содержит пример объявления дженериков как с применением ромбовидного оператора, так и без него.
>// Без ромбовидного оператора
>List
>Map
>····new HashMap
>// C ромбовидным оператором
>List
>Map
Конструкция try-with-resources
В некоторых Java API закрытием ресурсов необходимо управлять вручную, обычно с помощью метода close в блоке finally. Это касается ресурсов, управляемых операционной системой, например файлов, сокетов или соединений интерфейса JDBC. Листинг 1.8 показывает, как необходимо ставить закрывающий код в блоке finally с обработкой исключений, но удобочитаемость кода из-за этого снижается.
>try {
>··InputStream input = new FileInputStream(in.txt);
>··try {
>····OutputStream output = new FileOutputStream(out.txt);
>····try {
>······byte[] buf = new byte[1024];
>······int len;
>······while ((len = input.read(buf)) >= 0)
>······output.write(buf, 0, len);
>····} finally {
>······output.close();
>····}
>··} finally {
>····input.close();
>··}
>} catch (IOException e) {
>··e.printStrackTrace();
>}
Конструкция try-with-resources решает проблему читаемости с помощью нового, более простого синтаксиса. Это позволяет ресурсам в блоке try автоматически высвобождаться в его конце. Нотация, описанная в листинге 1.9, может использоваться для любого класса, реализующего новый интерфейс java.lang.AutoCloseable. Сейчас он реализуется множеством классов (InputStream, OutputStream, JarFile, Reader, Writer, Socket, ZipFile) и интерфейсов (java.sql.ResultSet).