Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

СТП / lec / java2014-lec-08

.pdf
Скачиваний:
7
Добавлен:
03.03.2016
Размер:
809.22 Кб
Скачать

Generics (обобщения) в Java

Generics (обобщения типов данных) в Java описываются

следующим образом:

Обеспечивают безопасность приведения типов во время компиляции

Исключают необходимость в постоянном приведении типов

Обеспечивается возможность создания однородных

коллекций.

Generics

Коллекция без использования Generics:

ArrayList list = new ArrayList(); list.add(0, new Integer(42));

int total = ((Integer)list.get(0)).intValue();

Коллекция с использованием Generics:

ArrayList<Integer> list = new ArrayList<Integer>(); list.add(0, new Integer(42));

int total = list.get(0).intValue();

Пример с обобщением на коллекции Set

1import java.util.*;

2public class GenSetExample {

3

public static void main(String[] args) {

4

Set<String> set = new HashSet<String>();

5

set.add("one");

6

set.add("second");

7

set.add("3rd");

8

 

9

// Эта строка приведет к ошибке компиляции

10

set.add(new Integer(4));

11

set.add("second"); // Дубликат, не добавляется

12

 

13

System.out.printIn(set);

14}

15}

Пример с обобщением на коллекции Map

import java.util.*;

public class MapPlayerRepository { HashMap<String, String> players;

public MapPlayerRepository() {

players = new HashMap<String, String>();

}

public String get(String position) {

String player = players.get(position); return player;

}

public void put(String position, String name) { players.put(position, name);

}

}

Варианты использования Generics

Категория

Без обобщений

С обобщениями

 

public class ArrayList

public class ArrayList<E>

Объявление класса

extends AbstractList

extends AbstractLlst<E>

 

implements List

implements List <E>

 

 

 

Объявление

public ArrayList(int capacity);

public ArrayLlst<E> (int capacity);

конструктора

 

 

 

 

 

Объявление метода

public void add( (Object) o)

public void add(E o)

public Object get(int Index)

public E get(int index)

 

 

 

Примеры объявления

ArrayList list1;

ArrayList <String> list1;

переменных

ArrayList list2;

ArrayList <Date> list2;

 

 

 

 

 

Создание экземпляров

list1 = new ArrayList(10);

list1 = new ArrayList<String> (10);

классов

list2 = new ArrayList(10);

list2 = new ArrayList<Date> (10);

 

 

 

 

 

Обобщения в механизме коллекций

Обобщенное программирование

Обобщенное программирование – написание кода,

который многократно может быть использован с

объектами различных типов.

Три уровня:

Использование готовых обобщений

ArrayList<E> и так далее.

Изучение и создание кода, использующего готовые обобщения

Написание своих собственных обобщенных классов

Обобщенный класс

public class Pair<T> { private T first; private T second; public Pair () {};

public Pair(T first, T second) {}; public T getFirst(){ return first; } public void setFirst(T first) {}

}

...

public class Main {

Pair<String> pair = new Pair<String>();

}

Обобщенный метод

class ArrayAlg {

public static <T> T getMiddle(T[] a) { return a[a.length/2];

}

}

// вызов обобщенного метода

ArrayAlg.<String>getMiddle(new String[]{“aa”,”bb”});

Если нет неоднозначности и компилятор однозначно по

типу параметров может определить вызываемый метод, то

нет необходимости писать <String>.

<Т> Т getMiddle(T[] а); ArrayAlg.getMiddle(new String[]{“aa”,”bb”});

<Т>Т getMiddle(T... а); ArrayAIg.getMiddle(103.1, 10, 5); // ошибка

Соседние файлы в папке lec