Статьи

Обновления статуса Java 8

В новом выпуске Java SE 8 появятся две большие новые языковые возможности: лямбда-выражения и модульность. Для обоих обновления статуса были выпущены в эти дни. Я поделюсь ссылками с вами, чтобы вы могли прочитать их в праздничные дни ;-)
Выпуск Java SE 8 запланирован на середину 2013 года Oracle.

Проект Лямбда

Project Lambda, а также JSR-335 хотят предоставить средства для моделирования кода как данных в Java — в неточных, разговорных словах, можно сказать, что он предназначен для функций как объектов первого класса в Java. Для этого Project lambda хочет предоставить следующие четыре расширения для языка Java:

  1. Лямбда-выражения или замыкания, которые позволяют программисту задавать часть исполняемого кода в виде кода. Они могут храниться в переменной, передаваться методу в качестве аргумента или использоваться как возвращаемое значение метода.
  2. Раскрыть Target Typing для привязки лямбда-выражений к объектам определенного типа (вывод типа). Эти типы могут быть так называемыми функциональными интерфейсами — интерфейсами Java с одним методом.
  3. Ссылки на методы и конструкторы, позволяющие программисту использовать существующие методы на объектах, которые должны быть связаны с интерфейсом функций.
  4. Методы расширения по умолчанию или виртуальные расширения, чтобы добавить больше методов к существующим интерфейсам, не нарушая существующие реализации (особенно в библиотеке коллекции).
Чтобы дать вам представление, вот фрагмент кода, использующий анонимные внутренние классы для некоторой логики коллекции.
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 Йоханнеса Тёнеса в блоге Йоханнеса Тёнеса .

Статьи по Теме :