Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Haulmont-презентации Java / Haulmont. java_se_8.ppt
Скачиваний:
42
Добавлен:
16.03.2015
Размер:
1.04 Mб
Скачать

Ограниченные типы

21Пример 3

//Эти строки не будут компилироваться,так как String

//не является подклассом суперкласса Number

// String strs[] = { "1", "2", "3", "4", "5" };

//Stats<String> strob = new Stats<String>(strs);

//double x = strob.average() ;

//System.out.printlnf"strob average is " + v);

}

}

Результат: Average is 3.0 Average is 3.3

Как имя типа может быть указан интерфейс

Как имя типа может быть указан ранее введенный параметр

Все права защищены. www.haulmont.ru info@haulmont.com

© HAULMONT, 2013

Метасимвольный аргумент

22 Пример 4

boolean sameAvg(Stats<T> ob) { if ((average) == ob.average())

return true; return false;

}

К сожалению, приведенный пример будет обрабатывать только те объекты класса Stats, у которых тип такой же, как у объекта, вызвавшего метод

Например, если метод вызывает объект типа Stats<Integer>, параметр ob должен тоже быть

типа Stats<Integer>

Все права защищены. www.haulmont.ru info@haulmont.com

© HAULMONT, 2013

Метасимвольный аргумент

23• Для создания универсального метода вы должны использовать другую функциональную возможность средств настройки типов —

метасимвольный аргумент, или символьную маску

Метасимвольный аргумент задается знаком ? и представляет неизвестный тип

Пример 5

boolean sameAvg(Stats<?> ob) { if ((average) == ob.average())

return true; return false;

}

Все права защищены. www.haulmont.ru info@haulmont.com

© HAULMONT, 2013

Метасимвольный аргумент

24Важно понять, что метасимвол не влияет

на тип создаваемого объекта класса Stats

Тип определяется ключевым словом extends в объявлении класса Stats

Метасимвол, или маска, обеспечивает совместимость любых допустимых объектов типа Stats

Все права защищены. www.haulmont.ru info@haulmont.com

© HAULMONT, 2013

Метасимвол с ограничениями

25 • Ограниченный метасимвол, или маска, задает как верхнюю, так и нижнюю границы аргумента типа

Это позволяет ограничить набор типов объектов,

которые будут обрабатываться методом

Ограничение сверху <? extends super>

Оно констатирует, что маска ? соответствует типу super

и любому производному от него классу

Тип super допускается

Ограничение снизу <? super sub>

В этом случае, допустимыми аргументами считаются

только суперклассы класса, заданного как sub

Тип sub не допускается

Все права защищены. www.haulmont.ru info@haulmont.com

© HAULMONT, 2013

Настраиваемые методы

26 • Как было показано ранее, методы в настраиваемых классах могут использовать параметр типа и таким образом автоматически становятся настраиваемыми по отношению к этому параметру типа

Однако можно и объявить настраиваемый метод с одним или несколькими собственными параметрами типа

Более того, есть возможность создать настраиваемый метод внутри ненастраиваемого класса

Все права защищены. www.haulmont.ru info@haulmont.com

© HAULMONT, 2013

Настраиваемые методы

27Пример 6

class GenMethDemo {

// Определяет, является ли объект элементом

массива

static <T, V extends T> boolean isIn(T x, V[] y) { for(int i=0; i < y.length; i++)

if(x.equals(y[i])) return true; return false;

}

public static void main(String args[]) {

// Использует метод isin() для объектов типа Integer Integer nums[] = { 1, 2, 3, 4, 5 };

if(isIn(2, nums))

System.out.println("2 is in nums");

Все права защищены. www.haulmont.ru info@haulmont.com

© HAULMONT, 2013

Настраиваемые методы

28 Пример 6

if(!isIn(7, nums))

System.out.println("7 is not in nums"); System.out.println();

// Использует метод isIn() для объектов типа String String strs[] = { "one", "two", "three", "four", "five" };

if(isIn("two", strs)) System.out.println("two is in strs");

if(!isIn("seven", strs)) System.out.println("seven is not in strs");

//He откомпилируется, поскольку типы не совместимы

//if(isln("two", nums})

//System.out.println("two is in strs”);

}}

Все права защищены. www.haulmont.ru info@haulmont.com

© HAULMONT, 2013

Настраиваемые методы

29 Результат:

2 is in nums

7 is not in nums two is in strs seven is not in strs

Все права защищены. www.haulmont.ru info@haulmont.com

© HAULMONT, 2013

Настраиваемые методы

30• Далее приведена синтаксическая запись для настраиваемого метода:

<type-param-list> ret-type meth-

name(param-list) { //...

type-param-list всегда представляет собой разделенный запятыми список параметров типа

Обратите внимание на то, что у настраиваемых методов этот список предшествует типу значения, возвращаемого методом

Все права защищены. www.haulmont.ru info@haulmont.com

© HAULMONT, 2013

Соседние файлы в папке Haulmont-презентации Java