2. Аннотации
Аннотации – набор мета-данных, который
может быть приложен к части программного
кода.
Аннотации могут применяться к:
1. Классам
2. Методам
3. Полям
4. Конструкторам
5. Другим аннотациям
Аннотации2
19. Java IO
Поток(stream) – это некоторая
абстракция, представляющая
последовательность данных. Input stream
используется для чтения данных, output
stream – для записи.
Java IO19
21. Java IO
Пример чтения/записи
public void processFile() {
FileInputStream in = null;
FileOutputStream out = null;
try {
in = new FileInputStream(…);
out = new FileOutputStream(…);
int c;
while ((c = in.read()) != -1) {
out.write( c );
}
} catch(Exception e) {
//do something
}finally {
if (in!=null) in.close();
if (out!=null) out.close();
}
}
Java IO21
23. Java IO
Буферизация
Байтовые потоки
In = new FileInputStream(…);
Out = new FileOutputStream(…);
BufferedInputStream input = new BufferedInputStream(in);
BufferedOutputStream output = new
BufferedOutputStream(out);
Символьные потоки
r = new FileReader(…);
w = new FileWriter(…);
BufferedReader reader = new BufferedReader( r)
BufferedWriter writer = new BufferedWriter(w);
Java IO23
28. Generics
Обобщения (Generics) – механизм,
позволяющий параметризовать классы,
интерфейсы и отдельные методы и
улучшить возможности по проверке типов
на стадии компиляции.
Generics28
29. Generics
Пример
public class Box<T> {
private T value;
public T getValue() {
return value;
}
public setValue(T value) {
this.value = value;
}
}
Использование:
Box<String> box = new Box<String>();
Generics29
30. Generics
Ограничения типов
public class Box<T extends Number> {
private T value;
public T getValue() {
return value;
}
public setValue(T value) {
this.value = value;
}
}
Использование:
Box<Integer> intBox = new Box<Integer> (); //ok
Box<String> stringBox = new Box<String>(); //compilation error
Generics30
34. Generics
Wildcard. Ограничения
public void consumeBox(Box<? extends Number>
box) {
//можно использовать методы Number.
box.getValue().intValue();
}
public void consumeBox(Box<? super Integer> box)
{
}
Generics34
35. Generics
Стирание типов
• Все параметры без ограничений
стираются до Object;
• Все параметры с ограничением
стираются до типа-ограничения;
• Добавляются операторы приведения
типа, если это необходимо;
Generics35
36. Generics
Стирание типов. Пример.
До стирания
public class Box<T> {
private T value;
public T getValue() {
return value;
}
public setValue(T value) {
this.value =
value;
}
}
После
public class Box {
private Object value;
public Object getValue() {
return value;
}
public setValue(Object
value){
this.value = value;
}
}
Generics36
38. Практическое задание
https://github.com/noveogroup/university-android-
SecondJavaTask
1. Создать иерархию из трех классов вида «1 Родитель – 2
потомка»;
2. Реализовать бинарное дерево, которое сможет хранить
классы из иерархии п.1 (использовать generics) и только
их. Класс дерева должен поддерживать вставку,
удаление и итерирование элементов;
3. Реализовать собственную иерархию исключений для
бинарного дерева из п.2;
4. Реализовать сериализацию/десериализацию дерева из
файла. Кроме самого дерева, необходимо складывать в
файл количество листьев в нем (custom serialization).
Практика38