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

Ряд особенностей

31Конструкторы так же могут быть

настраиваемыми (даже если сам класс – нет)

Пример 7

class GenCons { private double val;

<T extends Number> GenCons(T arg) { val = arg.doubleValue();

}

void showval() { System.out.println("val: " + val);

}

}

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

© HAULMONT, 2013

Ряд особенностей

32Пример 7

class GenConsDemo {

public static void main(String args[]) { GenCons test = new GenCons(100); GenCons test2 = new GenCons(123.5F); test.showval();

test2.showval();

}

}

Результат: val: 100.0 val: 123.5

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

© HAULMONT, 2013

Ряд особенностей

33Интерфейсы так же могут быть настраиваемыми

Пример 8

interface MinMax<T extends Comparable<T>> {

Tmin();

Tmax();

}

// Теперь реализуем MinMax

class MyClass<T extends Comparable<T>> implements MinMax<T>

T[] vals;

MyClass(T[] o) { vals = o; }

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

© HAULMONT, 2013

Ряд особенностей

34 Пример 8

public T min() { T v = vals[0];

for(int i=1; i < vals.length; i++) if(vals[i].compareTo(v) < 0) v = vals[i]; return v; }

public T max() { T v = vals[0];

for(int i=1; i < vals.length; i++) if(vals[i].compareTo(v) > 0) v = vals[i]; return v; }

}

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

© HAULMONT, 2013

Ряд особенностей

35 Пример 8

class GenIFDemo {

public static void main(String args[]) { Integer inums[] = {3, 6, 2, 8, 6 }; Character chs[] = {'b', 'r', 'p', 'w' };

MyClass<Integer> iob = new MyClass<Integer>(inums); MyClass<Character> cob = new MyClass<Character>(chs);

System.out.println("Max value in inums: " + iob.max());

System.out.println("Min value in inums: " + iob.min()); System.out.println("Max value in chs: " + cob.max());

System.out.println("Min value in chs: " + cob.min());

} }

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

© HAULMONT, 2013

Ряд особенностей

36 Результат:

Max value in inums: 8 Min value in inums: 2 Max value in chs: w Min value in chs: b

// Это неправильно!

class MyClass<T extends Comparable<T>> implements MinMax<T extends Comparable<T>>

// Это тоже неправильно!

class MyClass implements MinMax<T> { //

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

© HAULMONT, 2013

Ряд особенностей

37• Вообще, если класс реализует настраиваемый интерфейс, этот класс также должен быть

настраиваемым, по крайней мере, до той степени, которая обеспечивает получение параметра типа и передачу его в интерфейс

Применение настраиваемого интерфейса обладает двумя преимуществами

Во-первых, интерфейс можно реализовать для данных разных типов

Во-вторых, у вас появляется возможность наложить ограничения (т. е. установить границы) на типы данных, для которых может быть реализован интерфейс. В случае интерфейса MinMax, например, только типы, реализующие интерфейс Comparable, могут передаваться для замены параметра T

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

© HAULMONT, 2013

Ряд особенностей

38• Далее приведена обобщенная синтаксическая конструкция для описания настраиваемого

интерфейса:

interface interface-name<type-param-list> {//...

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

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

class class-name<type-param-list>

implements interface-name<type-param-list> {//..

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

© HAULMONT, 2013

Ряд особенностей

39Нельзя создавать объекты, используя

типы-параметры

Пример 9

class Gen<T> { T ob;

Gen() {

ob = new T(); //Неверно

}

}

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

© HAULMONT, 2013

Ряд особенностей

40Статические члены класса не могут

использовать его параметры типа

Пример 10

class Wrong<T> { // Неверно static T ob;

// Неверно

static T getob() { return ob;

}

}

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

© HAULMONT, 2013

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