Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
61
Добавлен:
08.06.2015
Размер:
562.18 Кб
Скачать

Подчеркивание в числовых литералах

Нельзя использовать

В начале и в конце числа

_123 123_

Рядом с разделителем целой и дробной части

10_.01 10._01

Перед суффиксами L, F и D

 

1_L

1.1_F

1.1_D

В строковых литералах с числами

"6_____6"

41

Проблема

Имеется:

public static Gender convert(String s) {

Gender g;

if (s.equals("м") || s.equals("муж") || s.equals("муж.") || s.equals("мужской")) { g = Gender.Male;

} else if (s.equals("ж") || s.equals("жен") || s.equals("жен.") || s.equals("женский")) {

g = Gender.Female; } else {

g = Gender.Unknown;

}

return g;

}

42

Проблема

Хотелось бы:

public static Gender convert(String s) { Gender g;

switch (s) {

case "м": case "муж": case "муж.": case "мужской": g = Gender.Male; break;

case "ж": case "жен": case "жен.": case "женский": g = Gender.Female; break;

default:

g = Gender.Unknown; break;

}

return g;

}

43

Строки в предложениях switch

В качестве проверяемого значения можно указывать ссылку на объект строки

В качестве значений для сравнения можно указывать

строковые литералы

ссылки на строки, объявление которых снабжено модификатором final

Сравнение значений производится также, как если бы использовался метод String.equals()

регистр имеет значение

начальные и концевые пробелы имеют значение

44

Проблема

Имеется:

List<Integer> list = new ArrayList<Integer>();

Map<Integer, Comparable<String>> m =

new HashMap<Integer, Comparable<String>>();

// Зачем два раза писать одно и то же???

Хотелось бы:

List<Integer> list = new ArrayList<>();

Map<Integer, Comparable<String>> m = new HashMap<>();

45

Вывод типа (type inference)

Можно использовать, если компилятор из контекста может понять, какие типы нужны

<> – «алмаз» (diamond)

В основном используется при создании объектов в ходе инициализации переменных

При создании объектов нельзя путать отсутствие указания типа (будет обобщенный тип) и оператор алмаз (будет вывод типа)

Из-за механизма стирания в параметризованных типах могут возникать непроверяемые компилятором приведения

46

Проблема

Имеется:

FileWriter out = null; try {

out = new FileWriter(fileName);

//Некоторый вывод данных

}finally {

try {

if (out != null) { out.close();

}

} catch (IOException ex) {

}

}

//По-хорошему ресурсы надо закрывать в блоке finally.

//Закрытие может выбрасывать исключения...

//И так для каждого ресурса…

47

Проблема

Хотелось бы:

try (FileWriter out = new FileWriter(fileName)) { // Некоторый вывод данных

}

try (FileReader in = new FileReader(fileName1); FileWriter out = new FileWriter(fileName2)) {

// Некоторая обработка данных

}

48

Блок try с ресурсами

Можно применять к ресурсам, объекты которых реализуют интерфейс java.lang.AutoCloseable

Содержит метод void close() throws Exception

От него наследуют многие интерфейсы, например java.io.Closeable

Можно объявлять несколько объектов в одном блоке

Закрываются ресурсы в порядке, обратном порядку объявления

49

Блок try с ресурсами

Блок может содержать и блоки catch, и блок finally

Код в них вызывается после того, как ресурс(ы) будут закрыты

Присутствует явное разделение исключений,

возникающих из-за закрытия ресурсов и в ходе выполнения блока try

Если возникают оба вида исключений

Исключения закрытия «замалчиваются» (suppressed)

Все замолчанные исключения можно получить, вызвав метод getSupressed() у выброшенного исключения бизнес-логики

50

Соседние файлы в папке Лекции