Статьи

JDK7 решает многословие Java

Изменения языка Java, принятые для включения в JDK7, были объявлены Джозефом Дарси . Мы уже знали, что закрытия были вне меню . К сожалению, языковая поддержка арифметики произвольной точности также существует . Окончательный список довольно спорный и включает в себя ряд изменений, которые уменьшат многословность программ Java (одна из основных критических замечаний в отношении Java со стороны сторонников других языков). Java никогда не будет такой лаконичной, как Perl или Haskell, но это не так уж плохо. Одной из сильных сторон Java является удобочитаемость. Однако есть некоторые области, где язык излишне многословен, и это то, к чему обращаются эти изменения.

Упрощенные Обобщения

Последней крупной ревизией языка Java была Java 5.0, в которой были представлены обобщения, автобокс, перечисления, переменные и аннотации. Несмотря на компромиссы стирания типов, дженерики стали основным улучшением языка. Они также внесли свой вклад в многословность кода Java. Необходимость полностью указать и ссылочный тип, и тип значения поля или переменной привели к некоторым очень длинным объявлениям:

Map<String, List<BigDecimal>> numberMap = new TreeMap<String, List<BigDecimal>>();

Предложенная в JDK7 алмазная нотация позволяет программисту опускать общие параметры справа, если они совпадают с левыми:

Map<String, List<BigDecimal>> numberMap = new TreeMap<>();

Коллекция Литералов

Запоздалое добавление литералов коллекции поможет уменьшить размер кода Java и сделать его более читабельным. Списки, наборы и карты могут быть созданы и заполнены без необходимости громоздких инициализаторов экземпляров:

List<Integer> powersOf2 = {1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024};


Map<String, Integer> ages = {"John" : 35, "Mary" : 28, "Steve" : 42};

Автоматическое управление ресурсами

Предложение Джоша Блоха об автоматическом управлении ресурсами дает Java альтернативу использованию CII RAII и C #. Это устраняет большую часть обработки исключительных ситуаций, которая связана с надлежащим созданием и распределением ресурсов, таких как потоки ввода-вывода, в коде Java. Предложение вводит новый интерфейс, Одноразовый, который будут реализованы ресурсами. Синтаксис try / catch / finally расширен, чтобы в начале можно было указывать ресурсы. Эти ресурсы затем автоматически удаляются после завершения. Вот пример нового синтаксиса в действии (взят из предложения):

static String readFirstLineFromFile2(String path) throws IOException
{
    try (BufferedReader reader = new BufferedReader(new FileReader(path))
    {
        return reader.readLine();
    }
}

Другие изменения

Наряду с вышеуказанными изменениями, касающимися многословия, JDK7 добавляет двоичные целочисленные литералы и возможность использовать строковые литералы в выражениях switch . JDK7 также исправит проблему смешивания параметров varargs с общими типами .

С http://blog.uncommons.org