
- •Нововведения Java 5.0.
- •Цели занятия
- •Статический импорт
- •Автоупаковка / автораспаковка
- •Автоупаковка / автораспаковка
- •Автоупаковка / автораспаковка
- •Аргументы переменной длины
- •Аргументы переменной длины
- •Особенности переменного
- •Настраиваемые типы (generic)
- •Настраиваемые типы
- •Настраиваемые типы
- •Настраиваемые типы
- •Настраиваемые типы
- •Настраиваемые типы
- •Ограниченные типы
- •Ограниченные типы
- •Ограниченные типы
- •Ограниченные типы
- •Метасимвольный аргумент
- •Метасимвольный аргумент
- •Метасимвольный аргумент
- •Метасимвол с ограничениями
- •Настраиваемые методы
- •Настраиваемые методы
- •Настраиваемые методы
- •Настраиваемые методы
- •Настраиваемые методы
- •Ряд особенностей
- •Ряд особенностей
- •Ряд особенностей
- •Ряд особенностей
- •Ряд особенностей
- •Ряд особенностей
- •Ряд особенностей
- •Ряд особенностей
- •Ряд особенностей
- •Ряд особенностей
- •Ряд особенностей
- •Ряд особенностей
- •Ошибки неоднозначности
- •Улучшенный цикл for(For-each)
- •Работа улучшенного цикла for
- •Обработка многомерных
- •Вывод
- •Перечислимые типы
- •Перечислимые типы
- •Замечания:
- •Метаданные
- •Метаданные
- •Правила сохранения аннотаций
- •Правила сохранения аннотаций
- •Правила сохранения аннотаций
- •Аннотации-маркеры
- •Одночленные аннотации
- •Одночленные аннотации
- •Одночленные аннотации
- •Встроенные аннотации
- •Встроенные аннотации
- •Литература

Ряд особенностей
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 |