В то время, когда Java постоянно помечается как мертвая, было приятно видеть энтузиазм сообщества Java по поводу глобального события Java 7, которое состоялось на прошлой неделе . Любой, кто все еще сомневается в том, что Oracle будет управлять Java, должен успокоить свои усилия, приложенные к этому событию. Кроме того, Oracle объединила команды разработчиков, работающих над Hotspot и JRockit, и взяла на себя обязательства по созданию самой большой команды разработчиков, работающей на Java. Журнал Java — еще один пример того, что делает Oracle, чтобы помочь сообществу быть более активным.
Я кратко изложу некоторые основные моменты выпуска Java 7
Изменения языка
Project Coin внес ряд изменений в язык Java 7, чтобы помочь разработчикам повысить производительность. Eclipse, NetBeans и IntelliJ имеют бета-поддержку изменений, поэтому вы уже можете попробовать их в своей любимой IDE. Когда вы читаете список, я уверен, вы согласитесь, что все улучшения приводят к более последовательному и лаконичному коду.
Синтаксис Diamond для вызова конструкторов
Несмотря на то, что дженерики были отличным дополнением к Java, требуется много дополнительной информации, которая не приносит никакой пользы, поэтому теперь нам не нужно:
Map<Integer, List<String>> daysToMonths = new HashMap<Integer, List<String>>();
Чтобы иметь возможность использовать это:
Map<Integer, List<String>> daysToMonths = new HashMap<>();
Компилятор использует вывод типа, чтобы определить, какие значения должны быть справа.
Это интересно, когда у вас есть следующее:
Map<?> myInfo = new HashMap<>();
Компилятор делает вывод, что значение справа является объектом. Если вы используете
Map<? extends Number> myInfo = new HashMap<>();
Компилятор знает, что базовый класс справа — это Number.
Предупреждения Varargs
Идея этой функции состоит в том, чтобы больше не получать неинформативные неконтролируемые предупреждения компилятора от вызова методов библиотеки платформы.
Multi-catch
С помощью функции multicatch ваш блок catch может обрабатывать различные исключения. Таким образом, вместо нескольких блоков catch для проверенных исключений, подобных этому:
try { //code } catch(IOException e) {} catch(NoSuchMethodException e) {}
Ты можешь использовать
try { //code } catch(IOException | NoSuchMethodException e) {}
Try-With-Resources
Там, где вы ранее использовали блок finally в операторе try / catch для закрытия любых ресурсов и предотвращения утечек, Java 7 предоставляет более элегантное решение. Это обеспечивает новую форму блока try, который принимает ресурсы в качестве параметров. Эти ресурсы гарантированно будут закрыты:
try(InputStream in = new FileInputStream("in.txt"); OutputStream out = new FileOutputStream("out.txt")) { //code } catch(IOException ioe) { //handle exception }
Строки в Switch
В прошлом вы могли использовать только целые числа или перечисления в вашем операторе switch.
Строка теперь может использоваться в операторе switch. Хотя это кажется небольшим изменением, оно сильно изменит читаемость вашего кода, избавив вас от груды операторов if / else.
Улучшения литералов
Целые числа могут использовать шестнадцатеричное или двоичное основание.
Вы можете посмотреть полный обзор возможностей Project Coin в следующем видео:
Fork / Join Framework
Платформа Fork / Join использует подход «разделяй и властвуй» к параллелизму.
Допустим, у вас есть задача, которую вы хотите выполнять параллельно. Этот класс должен расширять RecursiveAction, предоставляемый фреймворком.
Затем, если вы можете разделить работу, которую выполняет задача, вы просто вызываете invoke all с обеих сторон задачи, которую вы разделяете, используя метод invokeAll ()
public class Task extends RecursiveAction { protected void compute() { //decide if fork necessary //if it is invokeAll (leftTask, rightTask); //else //do work } }
Смотрите полный обзор здесь:
API новой файловой системы
В Java давно отсутствуют некоторые базовые файловые операции, такие как копирование и перемещение. Это привело к тому, что разработчикам нужно использовать библиотеку Apache Commons IO или писать похожий код для разных проектов. Это только одна из проблем с текущей реализацией Файла.
Теперь вместо использования объекта File вы можете использовать Path. Это неизменный класс, который может быть создан из строки, URI или файла.
Помимо других изменений, есть хорошая служба уведомлений об изменениях файлов, которая называется WatchService. Используя это, вы можете наблюдать за изменениями в конкретном файле или каталоге.
Для получения дополнительной информации, проверьте следующую презентацию
После Java 7
Релиз Java 8 будет включать в себя такие функции, как Project Jigsaw (модульность), Project Lambda (замыкания) и вторая часть улучшений языка Project Coin.
Кроме того, мы увидим полную конвергенцию JVM с интегрированными JRockit и Hotspot.