Выпуск Java SE 8 запланирован на середину 2013 года Oracle.
Проект Лямбда
Project Lambda, а также JSR-335 хотят предоставить средства для моделирования кода как данных в Java — в неточных, разговорных словах, можно сказать, что он предназначен для функций как объектов первого класса в Java. Для этого Project lambda хочет предоставить следующие четыре расширения для языка Java:
- Лямбда-выражения или замыкания, которые позволяют программисту задавать часть исполняемого кода в виде кода. Они могут храниться в переменной, передаваться методу в качестве аргумента или использоваться как возвращаемое значение метода.
- Раскрыть Target Typing для привязки лямбда-выражений к объектам определенного типа (вывод типа). Эти типы могут быть так называемыми функциональными интерфейсами — интерфейсами Java с одним методом.
- Ссылки на методы и конструкторы, позволяющие программисту использовать существующие методы на объектах, которые должны быть связаны с интерфейсом функций.
- Методы расширения по умолчанию или виртуальные расширения, чтобы добавить больше методов к существующим интерфейсам, не нарушая существующие реализации (особенно в библиотеке коллекции).
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
|
List students = // ... students.filter( new FilerFunction(){ @Override public boolean filter(Student s){ return s.getEntryYear() == 2011 ; } }) .map( new MapFunction<Student,Integer>(){ @Override public Integer map(Student s){ return s.getGrade(); } }) .reduce( new ReduceFunction<Integer>(){ @Override public Integer reduce(Integer value1, Integer value2){ Math.max(value1, value2); } }); |
В отличие от следующего кода, использующего функции на своем пути с Project Lambda:
1
2
3
4
5
|
List students = // ... students.paralell() .filter(s -> s.getEntryYear() == 2011 ) .map(s -> s.getGrade()) .reduce(Math::max); |
Информацию о текущем состоянии от Ведущего Спецификации и Руководства проекта OpenJDK Брайана Гетца можно найти в State of Lambda .
Проект Jigsaw — Модульность для платформы Java
В Project Jigsaw сообщество OpenJDK, возглавляемое Oracle, пытается внедрить модульность в язык Java. Подход будет отличаться от, например, OSGi, потому что они хотят установить его на уровне языка — со статической проверкой времени компиляции. Сотрудники Oracle всегда говорят, что стремятся к совместимости Jigsaw с OSGi.
Марк Рейнхольд, главный разработчик платформы Oracles и руководитель проекта OpenJDK, описывает три принципа модульного подхода:
- Модульность — это языковая конструкция . Лучший способ поддерживать модульное программирование стандартным способом на платформе Java — расширить сам язык для поддержки модулей. Разработчики уже думают о стандартных видах программных компонентов, таких как классы и интерфейсы, с точки зрения языка; модули должны быть просто еще одним видом программного компонента.
- Границы модуля должны строго соблюдаться — класс, который является закрытым для модуля, должен быть закрытым точно так же, как закрытое поле является закрытым для класса. Другими словами, границы модулей должны определять не только видимость классов и интерфейсов, но и их доступность. Без этой гарантии невозможно построить модульные системы, способные безопасно выполнять ненадежный код.
- Статическое разрешение для одной версии модуля обычно достаточно — большинству приложений не требуется динамически добавлять или удалять модули во время выполнения, а также им не нужно одновременно использовать несколько версий одного и того же модуля. Модульная система должна быть оптимизирована для распространенных сценариев, но также должна поддерживать узко-ограниченные формы динамического многоверсионного разрешения, основанные на реальных случаях использования, таких как, например, серверы приложений, IDE и тестовые наборы.
Для программиста, использующего Jigsaw, это будет особенно заметно, потому что язык теперь будет иметь три фазы (вместо двух):
- Время компиляции : классы модуля компилируются. Скомпилированные классы вместе с ресурсами (файлы конфигурации, файлы метаданных и т. Д.) Упакованы вместе в архив в формате JMOD (для java-модуля):
- Время установки: на любом компьютере, на котором установлена JRE, будет библиотека модулей. Здесь пользователь может установить Java-модули.
- Время выполнения: модуль, определяющий основной класс ( Invokable Module ). JVM загрузит этот модуль и все необходимые ему модули из библиотеки модулей, а затем выполнит код.
Информацию о текущем состоянии Project Jigsaw от Марка Рейнхольда можно найти в Project Jigsaw: The Big Picture — ПРОЕКТ 1 .
Ссылка: Java 8 Обновления статуса от нашего партнера JCG Йоханнеса Тёнеса в блоге Йоханнеса Тёнеса .
Статьи по Теме :