SlideShare a Scribd company logo
Generics в Java
Generics в Java

             1. Простые generic-и
1.List strList = new ArrayList();
2.strList.add("some text");
3.// ??!! O_o
4.strList.add(new Integer(0));
5.String str = (String)strList.get(0);
6.// ClassCastException
7.Integer i = (Integer)strList.get(0);
Generics в Java

                 1. Простые generic-и
1.List<String>  strList = new ArrayList<String>();
2.strList.add("some text");
3.strList.add(new Integer()); // сообщение об ошибке компилятора
4.String str = strList.get(0);
5.Integer i = strList.get(0); //сообщение об ошибке компилятора
Generics в Java

             1. Простые generic-и
1.class GenericList<E>{
2.     E getFirst() { ... }
3.     void add(E obj) { ... }
4.}

1.GenericList<String> genericList = new GenericList<String>();
Generics в Java
                  2. Generic-методы
1.public class CreateAnArrayList {
2.            public <T> void makeArrayList(T t) { // take an object of an
3.            // unknown type and use a
4.            // "T" to represent the type
5.               List<T> list = new ArrayList<T>(); // now we can create the
llist using "T"
6.               list.add(t);
7.            }
8.}


1.public void makeArrayList(Integer t) {
2.           List<Integer> list = new ArrayList<Integer>();
3.           list.add(t);
4.}
Generics в Java
                         2. Generic-методы
1.public class GenMethDemo {
2.// Determine if an object is in an array.
3.static <T> boolean isIn(T x, T[] y) {
4. for(int i=0; i < y.length; i++)
5. if(x.equals(y[i])) return true;
6. return false;
7.}
8.public static void main(String args[]) {
9. // Use isIn() on Integers.
10. Integer nums[] = { 1, 2, 3, 4, 5 };
11. if(isIn(2, nums))
12. System.out.println("2 is in nums");
13. // Use isIn() on Strings.
14. String strs[] = { "one", "two", "three", "four", "five" };
15. if(isIn("two", strs))
16. System.out.println("two is in strs");
17. // Opps! Won"t compile! Types must be compatible.
18. if(isIn("two", nums))
19. System.out.println("two is in strs");
20. }
21.}
Generics в Java

              3. Маски (wildcards)
•Предположим, у нас есть функция, которая находит ближайший к
точке Glyph из заданной коллекции. Glyph – это базовый тип, и может
иметься неограниченное количество потомков этого типа. Также
может иметься неограниченное количество коллекций, хранящих
элементы, тип которых соответствует одному из этих потомков.
Хотелось бы, чтобы функция могла работать со всеми подобными
коллекциями, и возвращала элемент, тип которого совпадал бы с
типом элемента коллекции, а не приводился к Glyph.
Generics в Java

                 3. Маски (wildcards)
1.<T> T findNearest(Collection<T> glyphs, int x, int y) { ... }

1.<T extends Glyph> T findNearest(Collection<T> glyphs, int x, int y) {...}
Generics в Java

                     3. Маски (wildcards)
class <T extends Glyph & MoveableGlyph> MoveableGlyphsContainter


static <T, V extends T> boolean isIn(T x, V[] y) {...}
Generics в Java

             3. Маски (wildcards)
1.public interface Box<T> {
2. public T get();
3. public void put(T element);
4.}

1.public void unbox(Box<?> box) {
2. System.out.println(box.get());//Так можно
3. box.put(new Object());//Так нельзя
4. box.put(box.get());//Так тоже нельзя
5. System.out.println(box.toString());//Так можно
6.}
Generics в Java
                      4. Хорошо и плохо
1.class FooEverythingDoer
2.{
3....
4.Map<String, String> getProperties(Foo foo) {...}
5.void putProperties(Foo foo, Map<String, String> properties) {...}
6.Map<Foo, Map<String, String>> getPropertiesBatch(Iterable<Foo> foos) {...}
7.Foo findByProperties(Map<String, String> partOfProperties) {...}
8....
9.}

1.class Properties extends Map<String,String> {
2. (constructors matching super here)
3.}

1.class FooEverythingDoer {
2. ...
3. Properties getProperties(Foo foo) {...}
4. void putProperties(Foo foo, Properties properties) {...}
5. Map<Foo, Properties> getPropertiesBatch(Iterable<Foo> foos) {...}
6. Foo findByProperties(Properties partOfProperties) {...}
7. ...
8.}
Generics в Java

                    4. Хорошо и плохо
1.   Map<Integer, List<String>> namesById = new HashMap<Integer, List<String>>();


1.public class CollectionFactory
2.{
3.public static <K,V> Map<K,V> newMap()
4.{
5. return new HashMap<K,V>();
6.}
7.}
8.import static CollectionUtils.newMap;
9.Map<Integer, List<String>> namesById = newMap();
Generics в Java
       5. Примеры
Java Generics: What it is and How to Implement it

More Related Content

What's hot (10)

PPT
Алгоритмы поиска и сортировки
Unguryan Vitaliy
 
PDF
Discovering Lambdas in Java 8
Stfalcon Meetups
 
PPT
3. java lecture classes
MERA_school
 
PPTX
Android - 01 - Java Basics
Noveo
 
PPT
Java. Строки. Класс String.
Unguryan Vitaliy
 
PPTX
Android - 03 - Multithreading, Collections
Noveo
 
PDF
Java осень 2013 лекция 2
Technopark
 
PPTX
основы Java переменные, циклы
Sergey Nemchinsky
 
PPT
Java. Интерфейс Map - ассоциативные массивы.
Unguryan Vitaliy
 
PDF
Лекция 8. Итераторы, генераторы и модуль itertools.
Roman Brovko
 
Алгоритмы поиска и сортировки
Unguryan Vitaliy
 
Discovering Lambdas in Java 8
Stfalcon Meetups
 
3. java lecture classes
MERA_school
 
Android - 01 - Java Basics
Noveo
 
Java. Строки. Класс String.
Unguryan Vitaliy
 
Android - 03 - Multithreading, Collections
Noveo
 
Java осень 2013 лекция 2
Technopark
 
основы Java переменные, циклы
Sergey Nemchinsky
 
Java. Интерфейс Map - ассоциативные массивы.
Unguryan Vitaliy
 
Лекция 8. Итераторы, генераторы и модуль itertools.
Roman Brovko
 

Viewers also liked (20)

PPT
Interactive web prototyping
Ecommerce Solution Provider SysIQ
 
PPT
Understanding Annotations in Java
Ecommerce Solution Provider SysIQ
 
PPTX
Java generics final
Akshay Chaudhari
 
PPT
L7 data model and dbms architecture
Rushdi Shams
 
PDF
On Parameterised Types and Java Generics
Yann-Gaël Guéhéneuc
 
PPTX
DBMS OF DATA MODEL Deepika 2
Rai Saheb Bhanwar Singh College Nasrullaganj
 
PDF
Java Generics: a deep dive
Bryan Basham
 
PDF
Java Generics Introduction - Syntax Advantages and Pitfalls
Rakesh Waghela
 
PPT
Java Annotation
karthik.tech123
 
PDF
Java Generics - by Example
CodeOps Technologies LLP
 
PPT
External Widgets Performance
Ecommerce Solution Provider SysIQ
 
PDF
Management and Communications (IPAA)
Ecommerce Solution Provider SysIQ
 
PDF
Unexpected achievements 2013
Ecommerce Solution Provider SysIQ
 
PPT
Правила хорошего SEO тона в Frontend разработке
Ecommerce Solution Provider SysIQ
 
PPT
Гибкость и Структурированность Oбъектно Oриентированноя CSS
Ecommerce Solution Provider SysIQ
 
PDF
Getting to know magento
Ecommerce Solution Provider SysIQ
 
PDF
QA evolution, in pictures
Ecommerce Solution Provider SysIQ
 
PPT
Mastering Java ByteCode
Ecommerce Solution Provider SysIQ
 
Interactive web prototyping
Ecommerce Solution Provider SysIQ
 
Understanding Annotations in Java
Ecommerce Solution Provider SysIQ
 
Java generics final
Akshay Chaudhari
 
L7 data model and dbms architecture
Rushdi Shams
 
On Parameterised Types and Java Generics
Yann-Gaël Guéhéneuc
 
DBMS OF DATA MODEL Deepika 2
Rai Saheb Bhanwar Singh College Nasrullaganj
 
Java Generics: a deep dive
Bryan Basham
 
Java Generics Introduction - Syntax Advantages and Pitfalls
Rakesh Waghela
 
Java Annotation
karthik.tech123
 
Java Generics - by Example
CodeOps Technologies LLP
 
External Widgets Performance
Ecommerce Solution Provider SysIQ
 
Management and Communications (IPAA)
Ecommerce Solution Provider SysIQ
 
Unexpected achievements 2013
Ecommerce Solution Provider SysIQ
 
Правила хорошего SEO тона в Frontend разработке
Ecommerce Solution Provider SysIQ
 
Гибкость и Структурированность Oбъектно Oриентированноя CSS
Ecommerce Solution Provider SysIQ
 
Getting to know magento
Ecommerce Solution Provider SysIQ
 
QA evolution, in pictures
Ecommerce Solution Provider SysIQ
 
Mastering Java ByteCode
Ecommerce Solution Provider SysIQ
 
Ad

Similar to Java Generics: What it is and How to Implement it (20)

PDF
[JAM 1.1] Clean Code (Paul Malikov)
Evgeny Kaziak
 
ODP
Generics
Alexey Bovanenko
 
PPTX
Вещи в Java, о которых вы (возможно) не знали
Zheka Kozlov
 
PPTX
Programming Java - Lecture 02 - Objects - Lavrentyev Fedor
Fedor Lavrentyev
 
PPTX
Groovy и Grails. Быстро и обо всём
Ruslan Balkin
 
PDF
Java осень 2014 занятие 2
Technopark
 
PPTX
Bytecode
Alex Tumanoff
 
PDF
Lec 4
Alexander Rusin
 
PDF
Tricky Java Generics
Alexander Matorin
 
PPTX
Массыви в Python. Основы использование массива
HSharipov
 
PPT
Лекция 3 Элементарные структуры данных Часть 1
simple_people
 
ODP
XML Magic
Igor Khotin
 
PPT
Oop java.generics
muqaddas_m
 
PDF
Thread
Alexander Rusin
 
PDF
Scala and LiftWeb presentation (Russian)
Dmitry Stropalov
 
PDF
Lambdas in java 8
chashnikov
 
PDF
Lec 3
Alexander Rusin
 
PDF
Основы языка Питон: типы данных, операторы
Theoretical mechanics department
 
PDF
C++ Базовый. Занятие 05.
Igor Shkulipa
 
PPTX
Exploding Head Issues
Alexander Shaubert
 
[JAM 1.1] Clean Code (Paul Malikov)
Evgeny Kaziak
 
Вещи в Java, о которых вы (возможно) не знали
Zheka Kozlov
 
Programming Java - Lecture 02 - Objects - Lavrentyev Fedor
Fedor Lavrentyev
 
Groovy и Grails. Быстро и обо всём
Ruslan Balkin
 
Java осень 2014 занятие 2
Technopark
 
Bytecode
Alex Tumanoff
 
Tricky Java Generics
Alexander Matorin
 
Массыви в Python. Основы использование массива
HSharipov
 
Лекция 3 Элементарные структуры данных Часть 1
simple_people
 
XML Magic
Igor Khotin
 
Oop java.generics
muqaddas_m
 
Scala and LiftWeb presentation (Russian)
Dmitry Stropalov
 
Lambdas in java 8
chashnikov
 
Основы языка Питон: типы данных, операторы
Theoretical mechanics department
 
C++ Базовый. Занятие 05.
Igor Shkulipa
 
Exploding Head Issues
Alexander Shaubert
 
Ad

More from Ecommerce Solution Provider SysIQ (19)

PDF
Developing for e commerce is important
Ecommerce Solution Provider SysIQ
 
PDF
Java serialization
Ecommerce Solution Provider SysIQ
 
PDF
Developing for e commerce is important
Ecommerce Solution Provider SysIQ
 
PDF
Magento code audit
Ecommerce Solution Provider SysIQ
 
PDF
User focused design
Ecommerce Solution Provider SysIQ
 
PDF
Scalability and performance for e commerce
Ecommerce Solution Provider SysIQ
 
PDF
Lupan big enterprise ecommerce fusion 2013
Ecommerce Solution Provider SysIQ
 
PDF
non-blocking java script
Ecommerce Solution Provider SysIQ
 
PDF
QA evolution to the present day
Ecommerce Solution Provider SysIQ
 
PDF
Quick Intro to Clean Coding
Ecommerce Solution Provider SysIQ
 
PDF
Manifest of modern engineers
Ecommerce Solution Provider SysIQ
 
PDF
User Behavior: Interacting With Important Website Elements
Ecommerce Solution Provider SysIQ
 
PDF
Seo and Marketing Requirements in Web Architecture
Ecommerce Solution Provider SysIQ
 
PDF
Databases on Client Side
Ecommerce Solution Provider SysIQ
 
PDF
Speed Up Your Website
Ecommerce Solution Provider SysIQ
 
PDF
Testing schools overview
Ecommerce Solution Provider SysIQ
 
PPTX
IGears: Template Architecture and Principles
Ecommerce Solution Provider SysIQ
 
PPT
Модульные сетки в реальном мире
Ecommerce Solution Provider SysIQ
 
Developing for e commerce is important
Ecommerce Solution Provider SysIQ
 
Developing for e commerce is important
Ecommerce Solution Provider SysIQ
 
Scalability and performance for e commerce
Ecommerce Solution Provider SysIQ
 
Lupan big enterprise ecommerce fusion 2013
Ecommerce Solution Provider SysIQ
 
non-blocking java script
Ecommerce Solution Provider SysIQ
 
QA evolution to the present day
Ecommerce Solution Provider SysIQ
 
Quick Intro to Clean Coding
Ecommerce Solution Provider SysIQ
 
Manifest of modern engineers
Ecommerce Solution Provider SysIQ
 
User Behavior: Interacting With Important Website Elements
Ecommerce Solution Provider SysIQ
 
Seo and Marketing Requirements in Web Architecture
Ecommerce Solution Provider SysIQ
 
Databases on Client Side
Ecommerce Solution Provider SysIQ
 
Speed Up Your Website
Ecommerce Solution Provider SysIQ
 
Testing schools overview
Ecommerce Solution Provider SysIQ
 
IGears: Template Architecture and Principles
Ecommerce Solution Provider SysIQ
 
Модульные сетки в реальном мире
Ecommerce Solution Provider SysIQ
 

Java Generics: What it is and How to Implement it

  • 2. Generics в Java 1. Простые generic-и 1.List strList = new ArrayList(); 2.strList.add("some text"); 3.// ??!! O_o 4.strList.add(new Integer(0)); 5.String str = (String)strList.get(0); 6.// ClassCastException 7.Integer i = (Integer)strList.get(0);
  • 3. Generics в Java 1. Простые generic-и 1.List<String> strList = new ArrayList<String>(); 2.strList.add("some text"); 3.strList.add(new Integer()); // сообщение об ошибке компилятора 4.String str = strList.get(0); 5.Integer i = strList.get(0); //сообщение об ошибке компилятора
  • 4. Generics в Java 1. Простые generic-и 1.class GenericList<E>{ 2. E getFirst() { ... } 3. void add(E obj) { ... } 4.} 1.GenericList<String> genericList = new GenericList<String>();
  • 5. Generics в Java 2. Generic-методы 1.public class CreateAnArrayList { 2. public <T> void makeArrayList(T t) { // take an object of an 3. // unknown type and use a 4. // "T" to represent the type 5. List<T> list = new ArrayList<T>(); // now we can create the llist using "T" 6. list.add(t); 7. } 8.} 1.public void makeArrayList(Integer t) { 2. List<Integer> list = new ArrayList<Integer>(); 3. list.add(t); 4.}
  • 6. Generics в Java 2. Generic-методы 1.public class GenMethDemo { 2.// Determine if an object is in an array. 3.static <T> boolean isIn(T x, T[] y) { 4. for(int i=0; i < y.length; i++) 5. if(x.equals(y[i])) return true; 6. return false; 7.} 8.public static void main(String args[]) { 9. // Use isIn() on Integers. 10. Integer nums[] = { 1, 2, 3, 4, 5 }; 11. if(isIn(2, nums)) 12. System.out.println("2 is in nums"); 13. // Use isIn() on Strings. 14. String strs[] = { "one", "two", "three", "four", "five" }; 15. if(isIn("two", strs)) 16. System.out.println("two is in strs"); 17. // Opps! Won"t compile! Types must be compatible. 18. if(isIn("two", nums)) 19. System.out.println("two is in strs"); 20. } 21.}
  • 7. Generics в Java 3. Маски (wildcards) •Предположим, у нас есть функция, которая находит ближайший к точке Glyph из заданной коллекции. Glyph – это базовый тип, и может иметься неограниченное количество потомков этого типа. Также может иметься неограниченное количество коллекций, хранящих элементы, тип которых соответствует одному из этих потомков. Хотелось бы, чтобы функция могла работать со всеми подобными коллекциями, и возвращала элемент, тип которого совпадал бы с типом элемента коллекции, а не приводился к Glyph.
  • 8. Generics в Java 3. Маски (wildcards) 1.<T> T findNearest(Collection<T> glyphs, int x, int y) { ... } 1.<T extends Glyph> T findNearest(Collection<T> glyphs, int x, int y) {...}
  • 9. Generics в Java 3. Маски (wildcards) class <T extends Glyph & MoveableGlyph> MoveableGlyphsContainter static <T, V extends T> boolean isIn(T x, V[] y) {...}
  • 10. Generics в Java 3. Маски (wildcards) 1.public interface Box<T> { 2. public T get(); 3. public void put(T element); 4.} 1.public void unbox(Box<?> box) { 2. System.out.println(box.get());//Так можно 3. box.put(new Object());//Так нельзя 4. box.put(box.get());//Так тоже нельзя 5. System.out.println(box.toString());//Так можно 6.}
  • 11. Generics в Java 4. Хорошо и плохо 1.class FooEverythingDoer 2.{ 3.... 4.Map<String, String> getProperties(Foo foo) {...} 5.void putProperties(Foo foo, Map<String, String> properties) {...} 6.Map<Foo, Map<String, String>> getPropertiesBatch(Iterable<Foo> foos) {...} 7.Foo findByProperties(Map<String, String> partOfProperties) {...} 8.... 9.} 1.class Properties extends Map<String,String> { 2. (constructors matching super here) 3.} 1.class FooEverythingDoer { 2. ... 3. Properties getProperties(Foo foo) {...} 4. void putProperties(Foo foo, Properties properties) {...} 5. Map<Foo, Properties> getPropertiesBatch(Iterable<Foo> foos) {...} 6. Foo findByProperties(Properties partOfProperties) {...} 7. ... 8.}
  • 12. Generics в Java 4. Хорошо и плохо 1. Map<Integer, List<String>> namesById = new HashMap<Integer, List<String>>(); 1.public class CollectionFactory 2.{ 3.public static <K,V> Map<K,V> newMap() 4.{ 5. return new HashMap<K,V>(); 6.} 7.} 8.import static CollectionUtils.newMap; 9.Map<Integer, List<String>> namesById = newMap();
  • 13. Generics в Java 5. Примеры