🗊Презентация Generics. Классы-оболочки

Нажмите для полного просмотра!
Generics. Классы-оболочки, слайд №1Generics. Классы-оболочки, слайд №2Generics. Классы-оболочки, слайд №3Generics. Классы-оболочки, слайд №4Generics. Классы-оболочки, слайд №5Generics. Классы-оболочки, слайд №6Generics. Классы-оболочки, слайд №7Generics. Классы-оболочки, слайд №8Generics. Классы-оболочки, слайд №9Generics. Классы-оболочки, слайд №10Generics. Классы-оболочки, слайд №11Generics. Классы-оболочки, слайд №12Generics. Классы-оболочки, слайд №13Generics. Классы-оболочки, слайд №14Generics. Классы-оболочки, слайд №15Generics. Классы-оболочки, слайд №16Generics. Классы-оболочки, слайд №17Generics. Классы-оболочки, слайд №18Generics. Классы-оболочки, слайд №19Generics. Классы-оболочки, слайд №20Generics. Классы-оболочки, слайд №21Generics. Классы-оболочки, слайд №22Generics. Классы-оболочки, слайд №23Generics. Классы-оболочки, слайд №24Generics. Классы-оболочки, слайд №25Generics. Классы-оболочки, слайд №26Generics. Классы-оболочки, слайд №27Generics. Классы-оболочки, слайд №28Generics. Классы-оболочки, слайд №29Generics. Классы-оболочки, слайд №30Generics. Классы-оболочки, слайд №31Generics. Классы-оболочки, слайд №32Generics. Классы-оболочки, слайд №33Generics. Классы-оболочки, слайд №34Generics. Классы-оболочки, слайд №35Generics. Классы-оболочки, слайд №36Generics. Классы-оболочки, слайд №37Generics. Классы-оболочки, слайд №38Generics. Классы-оболочки, слайд №39Generics. Классы-оболочки, слайд №40Generics. Классы-оболочки, слайд №41Generics. Классы-оболочки, слайд №42Generics. Классы-оболочки, слайд №43Generics. Классы-оболочки, слайд №44Generics. Классы-оболочки, слайд №45Generics. Классы-оболочки, слайд №46Generics. Классы-оболочки, слайд №47Generics. Классы-оболочки, слайд №48Generics. Классы-оболочки, слайд №49Generics. Классы-оболочки, слайд №50Generics. Классы-оболочки, слайд №51

Содержание

Вы можете ознакомиться и скачать презентацию на тему Generics. Классы-оболочки. Доклад-сообщение содержит 51 слайдов. Презентации для любого класса можно скачать бесплатно. Если материал и наш сайт презентаций Mypresentation Вам понравились – поделитесь им с друзьями с помощью социальных кнопок и добавьте в закладки в своем браузере.

Слайды и текст этой презентации


Слайд 1





Generics
Описание слайда:
Generics

Слайд 2





Классы-оболочки
В языке Java существуют классы-оболочки, которые являются объектным представлением восьми примитивных типов. Все классы-оболочки являются immutable. Автоупаковка и распаковка позволяют легко конвертировать примитивные типы в их соответствующие классы-оболочки и наоборот.
Описание слайда:
Классы-оболочки В языке Java существуют классы-оболочки, которые являются объектным представлением восьми примитивных типов. Все классы-оболочки являются immutable. Автоупаковка и распаковка позволяют легко конвертировать примитивные типы в их соответствующие классы-оболочки и наоборот.

Слайд 3





Пример упаковки и распаковки
int a = 5;
Integer b = a; // автоупаковка
Integer c = new Integer(a); // упаковка
int d = b; // распаковка
int e = (int)c; // необязательно
System.out.println(c); // 5
Описание слайда:
Пример упаковки и распаковки int a = 5; Integer b = a; // автоупаковка Integer c = new Integer(a); // упаковка int d = b; // распаковка int e = (int)c; // необязательно System.out.println(c); // 5

Слайд 4





Примитивные типы и обёртки
Описание слайда:
Примитивные типы и обёртки

Слайд 5





Зачем нужны оболочки
Разработчиками языка Java было принято решение отделить примитивные типы и классы-оболочки, указав при этом следующее:
Используйте классы-обёртки, когда работаете со стандартными коллекциями
Используйте примитивные типы для того, чтобы ваши программы были максимально просты
Ещё одним важным моментом является то, что примитивные типы не могут быть null, а классы-оболочки — могут. Также классы-оболочки могут быть использованы для достижения полиморфизма.
Описание слайда:
Зачем нужны оболочки Разработчиками языка Java было принято решение отделить примитивные типы и классы-оболочки, указав при этом следующее: Используйте классы-обёртки, когда работаете со стандартными коллекциями Используйте примитивные типы для того, чтобы ваши программы были максимально просты Ещё одним важным моментом является то, что примитивные типы не могут быть null, а классы-оболочки — могут. Также классы-оболочки могут быть использованы для достижения полиморфизма.

Слайд 6





Практика
Создайте объект типа Double, и изучите список методов, предоставляемых этим классом. Создайте объект на основе целого числа, вещественного числа, строки. Попытайтесь изменить состояние объекта.
Описание слайда:
Практика Создайте объект типа Double, и изучите список методов, предоставляемых этим классом. Создайте объект на основе целого числа, вещественного числа, строки. Попытайтесь изменить состояние объекта.

Слайд 7





Обобщения (generics)
Нередко, создаваемые разработчиками алгоритмы и коллекции могут быть успешно использованы для разных типов данных без какого-либо изменения. Например, не зависят от типа данных алгоритмы поиска и сортировки, а класс List пригодился бы как для хранения целых чисел, так и для хранения объектов типа Student. Чтобы не создавать однообразные реализации для каждого типа данных, в языке Java начиная с версии SE5.0 были введены обобщения, или обобщённые типы, которые позволяют создавать более безопасный и при этом универсальный код.
Описание слайда:
Обобщения (generics) Нередко, создаваемые разработчиками алгоритмы и коллекции могут быть успешно использованы для разных типов данных без какого-либо изменения. Например, не зависят от типа данных алгоритмы поиска и сортировки, а класс List пригодился бы как для хранения целых чисел, так и для хранения объектов типа Student. Чтобы не создавать однообразные реализации для каждого типа данных, в языке Java начиная с версии SE5.0 были введены обобщения, или обобщённые типы, которые позволяют создавать более безопасный и при этом универсальный код.

Слайд 8





Безопасность
int x = 44;
String s = "hello";
ArrayList array = new ArrayList();
array.add(x); // упаковка (boxing)
array.add(s); // упаковки нет!
int y = (int) array.get(0); // unboxing
int z = (int) array.get(1); // упс!!!
Описание слайда:
Безопасность int x = 44; String s = "hello"; ArrayList array = new ArrayList(); array.add(x); // упаковка (boxing) array.add(s); // упаковки нет! int y = (int) array.get(0); // unboxing int z = (int) array.get(1); // упс!!!

Слайд 9





Упаковка и распаковка
В примере используется стандартный класс ArrayList из пакета java.util, который представляет коллекцию объектов. Чтобы поместить объект в коллекцию, применяется метод add. И хотя в коллекцию добавляются число и строка, по существу ArrayList содержит коллекцию значений типа Object. Таким образом, в вызове array.add(x); значение переменной x вначале "упаковывается" в объект типа Integer и апкастится до типа Object, а потом при получении элементов из коллекции - наоборот, "распаковывается" в нужный тип.
Описание слайда:
Упаковка и распаковка В примере используется стандартный класс ArrayList из пакета java.util, который представляет коллекцию объектов. Чтобы поместить объект в коллекцию, применяется метод add. И хотя в коллекцию добавляются число и строка, по существу ArrayList содержит коллекцию значений типа Object. Таким образом, в вызове array.add(x); значение переменной x вначале "упаковывается" в объект типа Integer и апкастится до типа Object, а потом при получении элементов из коллекции - наоборот, "распаковывается" в нужный тип.

Слайд 10





Устройство ArrayList
ArrayList устроен как массив ссылок типа Object, что позволяет добавлять в коллекцию переменные любого типа. Такая гибкость в некоторых случаях удобна, однако чаще всего в коллекции хранятся переменные одного и того же типа. Можно легко допустить ошибку приведения при извлечении данных из коллекции, т.е. поместить в коллекцию переменную одного типа, а при извлечении выполнить приведение к другому типу…
Описание слайда:
Устройство ArrayList ArrayList устроен как массив ссылок типа Object, что позволяет добавлять в коллекцию переменные любого типа. Такая гибкость в некоторых случаях удобна, однако чаще всего в коллекции хранятся переменные одного и того же типа. Можно легко допустить ошибку приведения при извлечении данных из коллекции, т.е. поместить в коллекцию переменную одного типа, а при извлечении выполнить приведение к другому типу…

Слайд 11





Проблемы
Упаковка и распаковка (boxing и unboxing) ведут к снижению производительности, поскольку система должна выполнить необходимые преобразования. Существует и другая проблема, связанная с упаковкой-распаковкой, - проблема безопасности типов. Например, во время выполнения последней строки возникает ошибка.
Описание слайда:
Проблемы Упаковка и распаковка (boxing и unboxing) ведут к снижению производительности, поскольку система должна выполнить необходимые преобразования. Существует и другая проблема, связанная с упаковкой-распаковкой, - проблема безопасности типов. Например, во время выполнения последней строки возникает ошибка.

Слайд 12





Хранение ссылок
Следует отметить, что если хранить в коллекции объекты ссылочных (не примитивных) типов, то снижения производительности происходить не будет, так как выполняется не упаковка-распаковка, а лишь формальное преобразование пользовательского типа в Object или наоборот.
Описание слайда:
Хранение ссылок Следует отметить, что если хранить в коллекции объекты ссылочных (не примитивных) типов, то снижения производительности происходить не будет, так как выполняется не упаковка-распаковка, а лишь формальное преобразование пользовательского типа в Object или наоборот.

Слайд 13





Решение
Обе проблемы смогут решить обобщённые типы. Они позволяют указать конкретный тип данных, который будет использоваться для коллекции или алгоритма (поддерживаются обобщённые классы, интерфейсы и методы). Например, в Java также существует обобщённая версия класса ArrayList:
Описание слайда:
Решение Обе проблемы смогут решить обобщённые типы. Они позволяют указать конкретный тип данных, который будет использоваться для коллекции или алгоритма (поддерживаются обобщённые классы, интерфейсы и методы). Например, в Java также существует обобщённая версия класса ArrayList:

Слайд 14





Обобщённая версия
int x = 44;
String s = "hello";
ArrayList<Integer> ar = new ArrayList<>();
ar.add(x); // упаковка не нужна
ar.add(s); // ошибка компиляции!
int y = ar.get(0); // распаковка не нужна
Описание слайда:
Обобщённая версия int x = 44; String s = "hello"; ArrayList<Integer> ar = new ArrayList<>(); ar.add(x); // упаковка не нужна ar.add(s); // ошибка компиляции! int y = ar.get(0); // распаковка не нужна

Слайд 15





Комментарии к примеру
Так как теперь используется обобщённая версия класса ArrayList, то нужно будет задать определённый тип данных, для которого этот класс будет применяться. Далее добавляется число и строка в коллекцию. Но если число будет добавлено в коллекцию без проблем, так как коллекция типизирована типом int, то на строке ar.add(s); возникнет ошибка времени компиляции, и придётся удалить эту строку. Таким образом, при применении обобщённого варианта класса снижается как количество потенциальных ошибок, так и время на выполнение программы.
Описание слайда:
Комментарии к примеру Так как теперь используется обобщённая версия класса ArrayList, то нужно будет задать определённый тип данных, для которого этот класс будет применяться. Далее добавляется число и строка в коллекцию. Но если число будет добавлено в коллекцию без проблем, так как коллекция типизирована типом int, то на строке ar.add(s); возникнет ошибка времени компиляции, и придётся удалить эту строку. Таким образом, при применении обобщённого варианта класса снижается как количество потенциальных ошибок, так и время на выполнение программы.

Слайд 16





Пример generic-класса (Point)
https://git.io/vokjC
Описание слайда:
Пример generic-класса (Point) https://git.io/vokjC

Слайд 17





Два параметра типа
https://git.io/vot6i
Описание слайда:
Два параметра типа https://git.io/vot6i

Слайд 18





Raw types (сырые типы)
Forest f = new Forest();
f.setInhabitant1(new Fairy());
f.setInhabitant2(new Elf());
f.setInhabitant2(new Fairy());
Fairy fairy = (Fairy) f.getInhabitant1();
Elf elf = (Elf) f.getInhabitant2(); // упс!
Forest<Fairy, Elf> f2 = f;
Forest f3 = new Forest<Fairy, Elf>();
Описание слайда:
Raw types (сырые типы) Forest f = new Forest(); f.setInhabitant1(new Fairy()); f.setInhabitant2(new Elf()); f.setInhabitant2(new Fairy()); Fairy fairy = (Fairy) f.getInhabitant1(); Elf elf = (Elf) f.getInhabitant2(); // упс! Forest<Fairy, Elf> f2 = f; Forest f3 = new Forest<Fairy, Elf>();

Слайд 19





Определение
Сырой тип  — это имя обобщённого класса или интерфейса без аргументов типа. Можно часто увидеть использование сырых типов в старом коде, поскольку многие классы (например, коллекции), до Java 5 были необобщёнными. При использовании сырых типов получается то же самое поведение, которое было до введения обобщений в Java.
Описание слайда:
Определение Сырой тип  — это имя обобщённого класса или интерфейса без аргументов типа. Можно часто увидеть использование сырых типов в старом коде, поскольку многие классы (например, коллекции), до Java 5 были необобщёнными. При использовании сырых типов получается то же самое поведение, которое было до введения обобщений в Java.

Слайд 20





Пример с котиками
https://git.io/voIfe
Описание слайда:
Пример с котиками https://git.io/voIfe

Слайд 21





Ограниченный тип
В некоторых случаях имеет смысл ограничить  типы, которые можно использовать в качестве аргументов в параметризованных типах. Например, в Термос можно будет наливать только ГорячиеНапитки. Подобное ограничение можно сделать с помощью ограниченного параметра типа (bounded type parameters).
Чтобы объявить ограниченный параметр типа, нужно после имени параметра указать ключевое слово extends, а затем указать верхнюю границу (upper bound). В этом контексте extends означает как extends, так и implements.
Описание слайда:
Ограниченный тип В некоторых случаях имеет смысл ограничить  типы, которые можно использовать в качестве аргументов в параметризованных типах. Например, в Термос можно будет наливать только ГорячиеНапитки. Подобное ограничение можно сделать с помощью ограниченного параметра типа (bounded type parameters). Чтобы объявить ограниченный параметр типа, нужно после имени параметра указать ключевое слово extends, а затем указать верхнюю границу (upper bound). В этом контексте extends означает как extends, так и implements.

Слайд 22





Ограничение параметра типа
https://git.io/votrb
class AverageCalculator<T extends Number & Comparable & Serializable> {
Описание слайда:
Ограничение параметра типа https://git.io/votrb class AverageCalculator<T extends Number & Comparable & Serializable> {

Слайд 23





Соглашение об именовании
Переменные типа именуются одной буквой в верхнем регистре. Это позволяет легко отличить переменную типа от класса или интерфейса. Наиболее часто используемые имена для параметров типа:
E — элемент (Element, широко используется в Java Collections Framework)
K — Ключ
N — Число
T — Тип
V — Значение
S, U, V и т. п. — 2-й, 3-й, 4-й типы
Описание слайда:
Соглашение об именовании Переменные типа именуются одной буквой в верхнем регистре. Это позволяет легко отличить переменную типа от класса или интерфейса. Наиболее часто используемые имена для параметров типа: E — элемент (Element, широко используется в Java Collections Framework) K — Ключ N — Число T — Тип V — Значение S, U, V и т. п. — 2-й, 3-й, 4-й типы

Слайд 24





Generic method
https://git.io/votdx
Описание слайда:
Generic method https://git.io/votdx

Слайд 25





Generic constructor
https://git.io/votFV
Конструкторы могут быть обобщёнными как в обобщённых, так и в необобщённых классах. 
Описание слайда:
Generic constructor https://git.io/votFV Конструкторы могут быть обобщёнными как в обобщённых, так и в необобщённых классах. 

Слайд 26





Generic interface
Iterable<T>
Comparable<T>
https://git.io/votbd
Описание слайда:
Generic interface Iterable<T> Comparable<T> https://git.io/votbd

Слайд 27





Обобщения и наследование
Можно присвоить объекту одного типа объект другого типа, если эти типы совместимы. Например, можно присвоить объект типа Integer переменной типа Object, так как Object является одним из супертипов Integer:
Object someObject = new Object();
Integer someInteger = new Integer(10);
someObject = someInteger;   // OK
Описание слайда:
Обобщения и наследование Можно присвоить объекту одного типа объект другого типа, если эти типы совместимы. Например, можно присвоить объект типа Integer переменной типа Object, так как Object является одним из супертипов Integer: Object someObject = new Object(); Integer someInteger = new Integer(10); someObject = someInteger;   // OK

Слайд 28





Обобщения и наследование
В объектно-ориентированной терминологии это называется связью «является» (“is a”). Так как Integer является Object -ом, то такое присвоение разрешено. Но Integer  также является и Number-ом, поэтому следующий код тоже корректен:
public void someMethod(Number n) { /* ... */ }
someMethod(new Integer(10));   // OK
someMethod(new Double(10.1));   // OK
Описание слайда:
Обобщения и наследование В объектно-ориентированной терминологии это называется связью «является» (“is a”). Так как Integer является Object -ом, то такое присвоение разрешено. Но Integer  также является и Number-ом, поэтому следующий код тоже корректен: public void someMethod(Number n) { /* ... */ } someMethod(new Integer(10));   // OK someMethod(new Double(10.1));   // OK

Слайд 29





Обобщения и наследование
Это также верно для обобщений. Можно осуществить вызов обобщённого типа, передав Number в качестве аргумента типа, и любой дальнейший вызов будет разрешён, если аргумент совместим с Number:
Box<Number> box = new Box<Number>();
box.add(new Integer(10));   // OK
box.add(new Double(10.1));  // OK
Описание слайда:
Обобщения и наследование Это также верно для обобщений. Можно осуществить вызов обобщённого типа, передав Number в качестве аргумента типа, и любой дальнейший вызов будет разрешён, если аргумент совместим с Number: Box<Number> box = new Box<Number>(); box.add(new Integer(10));   // OK box.add(new Double(10.1));  // OK

Слайд 30





Обобщения и наследование
void boxTest(Box<Number> n) { /* ... */ }
Можно ли будет передать в этот метод объект типа Box<Integer> или Box<Double>?
Нет, так как Box<Integer> и Box<Double> не являются потомками Box<Number>!
Описание слайда:
Обобщения и наследование void boxTest(Box<Number> n) { /* ... */ } Можно ли будет передать в этот метод объект типа Box<Integer> или Box<Double>? Нет, так как Box<Integer> и Box<Double> не являются потомками Box<Number>!

Слайд 31





Важно запомнить!
Для двух типов A и B (например, Number и Integer), MyClass<A>  не имеет никакой связи или родства с MyClass<B> , независимо от того, как A и B связаны между собой. Общий родитель MyClass<A> и MyClass<B>  — это Object.
Описание слайда:
Важно запомнить! Для двух типов A и B (например, Number и Integer), MyClass<A>  не имеет никакой связи или родства с MyClass<B> , независимо от того, как A и B связаны между собой. Общий родитель MyClass<A> и MyClass<B>  — это Object.

Слайд 32





Неизвестный тип (wildcard)
В обобщённом коде иногда встречается знак вопроса (?), называемый подстановочным символом, и означает это «неизвестный тип». Подстановочный символ может использоваться в разных ситуациях: как параметр типа, поля, локальной переменной, иногда в качестве возвращаемого типа. 
Описание слайда:
Неизвестный тип (wildcard) В обобщённом коде иногда встречается знак вопроса (?), называемый подстановочным символом, и означает это «неизвестный тип». Подстановочный символ может использоваться в разных ситуациях: как параметр типа, поля, локальной переменной, иногда в качестве возвращаемого типа. 

Слайд 33





Unbounded wildcard
https://git.io/vothz
Если просто использовать подстановочный символ <?>, то получится подстановочный символ без ограничений. Например, List<?> означает список неизвестного (т.е., почти любого) типа.
Описание слайда:
Unbounded wildcard https://git.io/vothz Если просто использовать подстановочный символ <?>, то получится подстановочный символ без ограничений. Например, List<?> означает список неизвестного (т.е., почти любого) типа.

Слайд 34





Зачем нужен wildcard
Описание слайда:
Зачем нужен wildcard

Слайд 35





Зачем нужен wildcard
Описание слайда:
Зачем нужен wildcard

Слайд 36





Upper bounded wildcard
Можно использовать подстановочный символ, ограниченный сверху, чтобы ослабить ограничения для переменной класса. Например, если хочется написать метод, который работает только с List<Integer>, List<Double> и List<Number>, этого можно достичь с помощью ограниченного сверху подстановочного символа.
Описание слайда:
Upper bounded wildcard Можно использовать подстановочный символ, ограниченный сверху, чтобы ослабить ограничения для переменной класса. Например, если хочется написать метод, который работает только с List<Integer>, List<Double> и List<Number>, этого можно достичь с помощью ограниченного сверху подстановочного символа.

Слайд 37





Пример на UBW
https://git.io/voqe2
Описание слайда:
Пример на UBW https://git.io/voqe2

Слайд 38





Lower bounded wildcard
Ограниченный снизу подстановочный символ ограничивает неизвестный тип так, чтобы он был либо указанным типом, либо одним из его предков. Допустим, хочется написать метод, который добавляет объекты Mops в список. Чтобы максимизировать гибкость, в список можно будет добавлять ещё и Dog с Animal-ом  — всё, что может хранить экземпляры класса Mops.
Описание слайда:
Lower bounded wildcard Ограниченный снизу подстановочный символ ограничивает неизвестный тип так, чтобы он был либо указанным типом, либо одним из его предков. Допустим, хочется написать метод, который добавляет объекты Mops в список. Чтобы максимизировать гибкость, в список можно будет добавлять ещё и Dog с Animal-ом  — всё, что может хранить экземпляры класса Mops.

Слайд 39





Почему обобщения не работают с примитивными типами?
http://stackoverflow.com/questions/2721546/why-dont-java-generics-support-primitive-types
Generics in Java are an entirely compile-time construct - the compiler turns all generic uses into casts to the right type. This is to maintain backwards compatibility with previous JVM runtimes.
Описание слайда:
Почему обобщения не работают с примитивными типами? http://stackoverflow.com/questions/2721546/why-dont-java-generics-support-primitive-types Generics in Java are an entirely compile-time construct - the compiler turns all generic uses into casts to the right type. This is to maintain backwards compatibility with previous JVM runtimes.

Слайд 40





Стирание типа
Обобщения были введены в язык программирования Java для обеспечения более жёсткого контроля типов во время компиляции и для поддержки обобщённого программирования. Для реализации обобщения компилятор:
Заменяет все параметры типа в обобщённых типах их границами или Object-ами, если параметры типа не ограничены. Сгенерированный байт-код содержит только обычные классы, интерфейсы и методы!
Вставляет приведение типов где необходимо, чтобы сохранить безопасность типа.
Описание слайда:
Стирание типа Обобщения были введены в язык программирования Java для обеспечения более жёсткого контроля типов во время компиляции и для поддержки обобщённого программирования. Для реализации обобщения компилятор: Заменяет все параметры типа в обобщённых типах их границами или Object-ами, если параметры типа не ограничены. Сгенерированный байт-код содержит только обычные классы, интерфейсы и методы! Вставляет приведение типов где необходимо, чтобы сохранить безопасность типа.

Слайд 41





Стирание типа
Описание слайда:
Стирание типа

Слайд 42





Стирание типа
Описание слайда:
Стирание типа

Слайд 43





Стирание типа
Описание слайда:
Стирание типа

Слайд 44





На тему стирания типов
http://www.journaldev.com/1663/java-generics-example-method-class-interface#type-erasure
http://www.angelikalanger.com/GenericsFAQ/FAQSections/TechnicalDetails.html#FAQ101
Описание слайда:
На тему стирания типов http://www.journaldev.com/1663/java-generics-example-method-class-interface#type-erasure http://www.angelikalanger.com/GenericsFAQ/FAQSections/TechnicalDetails.html#FAQ101

Слайд 45





Чего делать нельзя
Описание слайда:
Чего делать нельзя

Слайд 46





Чего делать нельзя
Описание слайда:
Чего делать нельзя

Слайд 47





Чего делать нельзя
Описание слайда:
Чего делать нельзя

Слайд 48





Чего делать нельзя
Описание слайда:
Чего делать нельзя

Слайд 49





Чего делать нельзя
Описание слайда:
Чего делать нельзя

Слайд 50





Что почитать про обобщения
https://urvanov.ru/2016/04/28/java-8-%D0%BE%D0%B1%D0%BE%D0%B1%D1%89%D0%B5%D0%BD%D0%B8%D1%8F/
http://rsdn.ru/article/java/genericsinjava.xml
http://developer.alexanderklimov.ru/android/java/generic.php
http://www.k-press.ru/cs/2008/3/generic/generic.asp
http://www.quizful.net/post/java-generics-tutorial
http://javarevisited.blogspot.com/2011/09/generics-java-example-tutorial.html
https://uk.wikipedia.org/wiki/%D0%A3%D0%B7%D0%B0%D0%B3%D0%B0%D0%BB%D1%8C%D0%BD%D0%B5%D0%BD%D0%BD%D1%8F_%D0%B2_Java
http://docs.oracle.com/javase/tutorial/extra/generics/morefun.html
Описание слайда:
Что почитать про обобщения https://urvanov.ru/2016/04/28/java-8-%D0%BE%D0%B1%D0%BE%D0%B1%D1%89%D0%B5%D0%BD%D0%B8%D1%8F/ http://rsdn.ru/article/java/genericsinjava.xml http://developer.alexanderklimov.ru/android/java/generic.php http://www.k-press.ru/cs/2008/3/generic/generic.asp http://www.quizful.net/post/java-generics-tutorial http://javarevisited.blogspot.com/2011/09/generics-java-example-tutorial.html https://uk.wikipedia.org/wiki/%D0%A3%D0%B7%D0%B0%D0%B3%D0%B0%D0%BB%D1%8C%D0%BD%D0%B5%D0%BD%D0%BD%D1%8F_%D0%B2_Java http://docs.oracle.com/javase/tutorial/extra/generics/morefun.html

Слайд 51





Практика
Переделать классы-коллекции ArrayList, SLL, DLL, BinaryTree таким образом, чтобы они стали обобщёнными.
Реализовать интерфейс Iterable<T> для ваших реализаций типов ArrayList<T> и BinaryTree<T>.
Описание слайда:
Практика Переделать классы-коллекции ArrayList, SLL, DLL, BinaryTree таким образом, чтобы они стали обобщёнными. Реализовать интерфейс Iterable<T> для ваших реализаций типов ArrayList<T> и BinaryTree<T>.



Похожие презентации
Mypresentation.ru
Загрузить презентацию