Язык программирования JAVA

Содержание

Слайд 2

Содержание Что такое generics? Зачем? Ошибка выполнения Преимущества Ошибка компиляции Терминалогия

Содержание

Что такое generics? Зачем?
Ошибка выполнения
Преимущества
Ошибка компиляции
Терминалогия
Параметризация
Wildcard
Параметры с ограничениями
Ограничения использования

Слайд 3

Что такое generics? Обобщения (generics) — это параметризированные типы. Обобщенные: типы

Что такое generics?

Обобщения (generics) — это параметризированные типы.
Обобщенные:
типы (generic types)
классы (без

enum, исключений, анонимных!)
интерфейсы (без аннотаций!)
методы (generic methods)
конструкторы (generic constructors)
Слайд 4

До Java 5.0 class Box { private Object item; public void

До Java 5.0

class Box {
private Object item;
public void

setItem (Object o) {
item = o;
}
public Object getItem () {
return item;
}
}
public class Test {
public static void main(String[] args) {
Box box = new Box();
box.setItem("hello");
String str1 = (String)box.getItem();
System.out.println(str1);
}
}
Результат выполнения: hello
Слайд 5

Ошибка выполнения class Box { private Object item; public void setItem

Ошибка выполнения

class Box {
private Object item;
public void setItem

(Object o) {
item = o;
}
public Object getItem () {
return item;
}
}
public class Test {
public static void main(String[] args) {
Box box = new Box();
box.setItem("hello");
Integer int1 = (Integer)box.getItem();
//Exception
System.out.println(int1);
}
}
Результат выполнения: Exception in thread "main" java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Integer
Слайд 6

Зачем? Контейнеры гетерогенные гомогенные Параметризация типов методов конструкторов class Box {

Зачем?

Контейнеры
гетерогенные
гомогенные
Параметризация
типов
методов
конструкторов

class Box {
private

T item;
public void setItem (T o) {
item = o;
}
public T getItem () {
return item;
}
}
public class Test {
public static void main(String[] args) {
Box box = new Box();
box.setItem("hello");
String str1 = box.getItem();
System.out.println(str1);
}
}
Слайд 7

Преимущества Определение ошибок использования типов на этапе компиляции. Использование параметризованных -

Преимущества

Определение ошибок использования типов на этапе компиляции.
Использование параметризованных
- типов
-

методов
- конструкторов
Использование wildcards
- с ограничениями
- без ограничений
Слайд 8

Ошибка компиляции сlass Box { private T item; public void setItem

Ошибка компиляции

сlass Box {
private T item;
public void setItem (T

o) {
item = o;
}
public T getItem () {
return item;
}
}
public class Test {
public static void main(String[] args) {
Box box = new Box();
box.setItem(1234567);//Exception
String str1 = box.getItem();
System.out.println(str1);
}
}
Compilation completed with 1 error Error: java: incompatible types: int cannot be converted to java.lang.String
Слайд 9

Терминология Generic: class A {…} класс public A() {…} конструктор public

Терминология

Generic:
class A {…} класс
public A() {…} конструктор
public T m(T t) {…}

метод
T – параметр generic-а
Слайд 10

Параметризация Подстановка вместо параметра конкретного значения при использовании generic: Параметризованный класс:

Параметризация

Подстановка вместо параметра конкретного значения при использовании generic:
Параметризованный класс:
A a =

new A();
Обобщения действуют только со ссылочными типами
Box box = new Box(); //Error!
Слайд 11

Класс с двумя параметрами class Box { private T item; private

Класс с двумя параметрами

class Box {
private T item;
private

V item2;
public Box(T o, V o2) {
item = o;
item2 = o2;
}
}
Слайд 12

Wildcard Использование generic с указанием wildcards: ? extends ? super ?

Wildcard

Использование generic с указанием wildcards:
? extends <== extends wildcard
? super <== super wildcard
?

<== unbounded wildcard
Generic класс:
class A {…}
Wildcard параметризованный класс:
A a = new A();
A a = new A();
A a = new A();

class Box<Т> {}
class Human {
public void useBox(Box box) {}
}
public class Test {
public static void main(String[] args) {
Box stringBox = new Box<>();
Box numberBox = new Box<>();
Human human = new Human();
human.useBox(stringBox);
human.useBox(numberBox);
}
}

Слайд 13

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

Параметры с ограничениями

При объявлении можно наложить ограничения на значение параметра generic.
class

A {…}
J1, J2 - интерфейсы
При использовании класса A
если B – интерфейс
T – интерфейс, обязан наследовать B, J1, J2,
если B – класс
T – класс, обязан наследовать B, реализовывать J1, J2
Слайд 14

Ограничение сверху class Box { private T item; public void setItem

Ограничение сверху

class Box {
private T item;
public

void setItem (T o) {
item = o;
}
public Integer getIntValue () {
return item.intValue();
}
}
public class Test {
public static void main(String[] args) {
Box box = new Box<>();
box.setItem(123.45F);
Integer int1 = box.getIntValue();
System.out.println(int1);
}
}
Слайд 15

Обобщенные интерфейсы interface Box { setItem(T item); } class BoxImpl implements

Обобщенные интерфейсы

interface Box<Т> {
setItem(T item);
}
class BoxImpl implements

Box {
public void setItem(String item) {}
}
public class Test {
public static void main(String[] args) {
Box stringBox = new BoxImpl<>();
stringBox.setItem("Hello World");
}
}
Слайд 16

Иерархия классов class Box { public void setItem (T item) {}

Иерархия классов

class Box<Т> {
public void setItem (T item) {}

}
class BigBox extends Box {
public void setBigItems(K item, T item2) {}
}
public class Test {
public static void main(String[] args) {
BigBox stringBox = new BigBox<>();
stringBox.setItem("Very big item", 23);
}
}
Слайд 17

Ограничения использования Внутри generic нельзя: создать объект этого типа создать массив

Ограничения использования

Внутри generic нельзя:
создать объект этого типа
создать массив такого типа
использовать в

секции catch
использовать в статическом контексте
использовать в instanceof (справа)
наследовать