Изучаем Java EE 7 | страница 19



Строковый оператор

До появления Java SE 7 в качестве оператора ветвления могли использоваться только числа (типов byte, short, int, long, char) или перечисления. Теперь стало возможным применять переключатель с цифро-буквенными значениями Strcompare. Это помогает избежать длинных списков, начинающихся с if/then/else, и сделать код более удобочитаемым. Теперь вы можете использовать в своих приложениях код, показанный в листинге 1.6.


Листинг 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 содержит пример объявления дженериков как с применением ромбовидного оператора, так и без него.


Листинг 1.7. Объявление дженериков

>// Без ромбовидного оператора

>List list = new ArrayList();

>Map, Map>> map =

>····new HashMap, Map>>();


>// C ромбовидным оператором

>List list = new ArrayList<>();

>Map, Map>> map = new HashMap<>();

Конструкция try-with-resources

В некоторых Java API закрытием ресурсов необходимо управлять вручную, обычно с помощью метода close в блоке finally. Это касается ресурсов, управляемых операционной системой, например файлов, сокетов или соединений интерфейса JDBC. Листинг 1.8 показывает, как необходимо ставить закрывающий код в блоке finally с обработкой исключений, но удобочитаемость кода из-за этого снижается.


Листинг 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).