Язык программирования JAVA Generics Содержание Что такое generics?
41936-javase_part_3_generics.ppt
- Количество слайдов: 18
Язык программирования JAVA Generics
Содержание Что такое generics? Зачем? Ошибка выполнения Преимущества Ошибка компиляции Терминалогия Параметризация Wildcard Параметры с ограничениями Ограничения использования
Что такое generics? Обобщения (generics) — это параметризированные типы. Обобщенные: типы (generic types) классы (без enum, исключений, анонимных!) интерфейсы (без аннотаций!) методы (generic methods) конструкторы (generic constructors)
До 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
Ошибка выполнения 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
Зачем? Контейнеры гетерогенные гомогенные Параметризация типов методов конструкторов class Box
Преимущества Определение ошибок использования типов на этапе компиляции. Использование параметризованных - типов - методов - конструкторов Использование wildcards - с ограничениями - без ограничений
Ошибка компиляции сlass Box
Терминология Generic: class A
Параметризация Подстановка вместо параметра конкретного значения при использовании generic: Параметризованный класс: A
Класс с двумя параметрами class Box
Wildcard Использование generic с указанием wildcards: ? extends <== extends wildcard ? super <== super wildcard ? <== unbounded wildcard Generic класс: class A
Параметры с ограничениями При объявлении можно наложить ограничения на значение параметра generic. class A
Ограничение сверху class Box
Обобщенные интерфейсы interface Box<Т> { setItem(T item); } class BoxImpl implements Box
Иерархия классов class Box<Т> { public void setItem (T item) {} } class BigBox
Ограничения использования Внутри generic нельзя: создать объект этого типа создать массив такого типа использовать в секции catch использовать в статическом контексте использовать в instanceof (справа) наследовать
Вопросы?