Поиск по этому блогу

четверг, 9 февраля 2012 г.

Фичи java 7 (Project coin) ч.1

Недавно вышла новая версия java с большим количеством нововведений и полезных фич. Описания новых возможностей в рунете не так много, поэтому и родилась статья.
Project coin - список наиболее юзабельных изменений.

1.String в конструкции Switch

С точки зрения чистоты кода - правильнее для этих целей использовать enum.
Но, с другой стороны, никто не мешает вместо строковых литералов в следующем примере использовать строковые константы. Зато, например, при написании юнит-тестов значительно может упроститься наша жизнь.
     private User getUserByRole(String userRole) {
        User newUser = null;
        switch (userRole) {
            case "admin":
                newUser = new Adminisitator();
                break;
            case "manager":
                newUser = new Manager();
                break;
            default:
                newUser = new User();
                break;
        }
        return newUser;
    }


2. Оператор <> (или в англоязычной версии "diamond operator")

Теперь никто не мешает написать
 List boo = new ArrayList<>();
Возможности добавить в список элемент,что имеет тип не Long, нет уже на уровне компиляции.

3. Числовые константы

Помимо всеобщих строковых литералов и констант, для повышения читаемости кода теперь можно прописывать числовые команды в двоичной системе и с подчеркиванием:
        int i = 0b11;
        Long num = 0b11111011010L;

        long bigCommon = 1000120500L;
        long bigReadbale= 1_000_120_500L;
        int iReadable = 0b1000_0000_0000;
4. Суффиксы в byte и short

Теперь помимо суффикса для Long, появились суффиксы для других типов.
1) S и s для short;
2) Y и y для byte.
        byte b1 = (byte)0x80;
        byte b2 = 0x80y;
        byte[] ba1 = {0x7F, (byte)0x80, (byte)0xFF};
        byte[] ba2 = {0x7F, 0x80y, 0xFFy};

5. Управление ресурсами

Теперь освобождение ресурсов может производится автоматически (вместо их освобождения в блоке finally, как было ранее):
    static String readFirstLineFromFile(String path) throws IOException {
        try (BufferedReader br = new BufferedReader(new FileReader(path))) {
            return br.readLine();
        }
        //ресурс закроется автоматически
    }

Это работает за счет добавления нового интерфейса AutoCloseable в java.lang. При этом интерфейс Closeable находится на уровень ниже, что делает все потоки автозакрываемыми.

6. Пробрасывание исключений и одновременная обработка нескольких исключений сразу

Теперь для обработки всех исключений вместо всего списка искобчений, что может генерировать функция достаточно прописать ключевое слово final и параметр типа Exception:
 public void readParams() throws IOException, IllegalAccessException{
        try {
            doSomething();
            // выбрасывает IOException, IllegalAccessException
        } catch (final Exception ex) {
            logger.log(ex);
            throw ex;
        }
    }

Также добавлен синтаксис для обработки нескольких исключений сразу:
public void readParams2(){
        try {
            doSomething();
            // выбрасывает IOException, IllegalAccessException 
        } catch (IOException | IllegalAccessException ex) {
            logger.log(ex);
        }
}