- •Нововведения Java 5.0.
- •Цели занятия
- •Статический импорт
- •Автоупаковка / автораспаковка
- •Автоупаковка / автораспаковка
- •Автоупаковка / автораспаковка
- •Аргументы переменной длины
- •Аргументы переменной длины
- •Особенности переменного
- •Настраиваемые типы (generic)
- •Настраиваемые типы
- •Настраиваемые типы
- •Настраиваемые типы
- •Настраиваемые типы
- •Настраиваемые типы
- •Ограниченные типы
- •Ограниченные типы
- •Ограниченные типы
- •Ограниченные типы
- •Метасимвольный аргумент
- •Метасимвольный аргумент
- •Метасимвольный аргумент
- •Метасимвол с ограничениями
- •Настраиваемые методы
- •Настраиваемые методы
- •Настраиваемые методы
- •Настраиваемые методы
- •Настраиваемые методы
- •Ряд особенностей
- •Ряд особенностей
- •Ряд особенностей
- •Ряд особенностей
- •Ряд особенностей
- •Ряд особенностей
- •Ряд особенностей
- •Ряд особенностей
- •Ряд особенностей
- •Ряд особенностей
- •Ряд особенностей
- •Ряд особенностей
- •Ошибки неоднозначности
- •Улучшенный цикл for(For-each)
- •Работа улучшенного цикла for
- •Обработка многомерных
- •Вывод
- •Перечислимые типы
- •Перечислимые типы
- •Замечания:
- •Метаданные
- •Метаданные
- •Правила сохранения аннотаций
- •Правила сохранения аннотаций
- •Правила сохранения аннотаций
- •Аннотации-маркеры
- •Одночленные аннотации
- •Одночленные аннотации
- •Одночленные аннотации
- •Встроенные аннотации
- •Встроенные аннотации
- •Литература
Особенности переменного
количества аргументов
11
•Внутри там все равно находится массив
•Аргумент переменной длины в методе может быть только один
•В список параметров метода могут быть включены "обычные" (обязательно указываемые при вызове метода) параметры наряду с параметром переменной длины
•В этом случае аргумент переменной длины должен быть последним в списке аргументов метода
•В сочетании с перегрузкой методов аргумент переменной длины способен приводить к ошибкам компиляции ввиду неоднозначности кода
static void vaTest(int …v) { //...
static void vaTest(int n, int …v) { //...
vaTest(1)
Все права защищены. www.haulmont.ru info@haulmont.com |
© HAULMONT, 2013 |
Настраиваемые типы (generic)
12
• Имеется:
List list= new LinkedList (); list.add(10);
list.add(5);
list.add((Integer)list.get(0) + (Integer)list.get(1));
• Хотелось бы:
List<Integer> list= new LinkedList<Integer>(); list.add(10);
list.add(5);
list.add(list.get(0) + list.get(1));
Все права защищены. www.haulmont.ru info@haulmont.com |
© HAULMONT, 2013 |
Настраиваемые типы
13
• Позволяют создавать классы, интерфейсы и методы, в которых тип обрабатываемых данных задается как параметр
• Класс, интерфейс или метод, работающие с параметризованными типами, называются
настраиваемыми
• Позволяют создавать более компактный код, чем универсальные (обобщенные) типы
• Обеспечивают автоматическую проверку и приведение типов
• Позволяют создавать хороший повторно используемый код
Все права защищены. www.haulmont.ru info@haulmont.com |
© HAULMONT, 2013 |
Настраиваемые типы
14 Пример 2
class Gen<T> {
Tob; Gen(T o) {
ob = o;
}
Tgetob() { return ob;
}
void showType() {
System.out.println("Type of T is " + ob.getClass().getName());
}
}
Все права защищены. www.haulmont.ru info@haulmont.com |
© HAULMONT, 2013 |
Настраиваемые типы
15
Пример 2
class GenDemo {
public static void main(String args[]) { Gen<Integer> iOb;
iOb = new Gen<Integer>(88); iOb.showType();
int v = iOb.getob(); System.out.println("value: " + v); System.out.println();
Gen<String> strOb = new Gen<String>("Generics Test"); strOb.showType();
String str = strOb.getob();
System.out.println("value: " + str);
}
}
Все права защищены. www.haulmont.ru info@haulmont.com |
© HAULMONT, 2013 |
Настраиваемые типы
16 Результат:
Type of T is java.lang.Integer value: 88
Type of T is java.lang.String value: Generics Test
Все права защищены. www.haulmont.ru info@haulmont.com |
© HAULMONT, 2013 |
Настраиваемые типы
17Общий синтаксис:
• Объявление настраиваемого типа
class имяКласса<список-параметров-типа> {...}
class Generic2<T, E> {...}
•Создание ссылки и объекта настраиваемого типа
имяКласса<список-параметров-типа> имяПеременной = new имяКласса<список- параметров-типа>(список-аргументов);
Generic2<Integer, String> gObj = new Generic2<Integer, String>(10, “ok”);
Все права защищены. www.haulmont.ru info@haulmont.com |
© HAULMONT, 2013 |
Ограниченные типы
18
• При объявлении параметра типа вы можете задать верхнюю границу, определяющую суперкласс, от которого должны быть унаследованы все аргументы типа
• Такое ограничение устанавливается с помощью ключевого слова extends при описании параметра типа
<Т extends superclass>
•Приведенное объявление указывает на то, что параметр T можно заменить только типом superclass или его подклассами (производными от него классами)
•Таким образом, superclass задает верхнюю
границу включительно
Все права защищены. www.haulmont.ru info@haulmont.com |
© HAULMONT, 2013 |
Ограниченные типы
19 Пример 3
class Stats<T extends Number> { T[] nums;
Stats(T[] o) {nums = o;} double average() {
double sum = 0.0;
for(int i = 0; i < nums.length; i++) sum += nums[i].doubleValue();
return sum / nums.length;
}
}
Все права защищены. www.haulmont.ru info@haulmont.com |
© HAULMONT, 2013 |
Ограниченные типы
20 Пример 3
class BoundsDemo {
public static void main(String args[]) { Integer inums[] = { 1, 2, 3, 4, 5 };
Stats<Integer> iob = new Stats<Integer>(inums); double v = iob.average();
System.out.println("iob average is " + v); Double dnums[] = { 1.1, 2.2, 3.3, 4.4, 5.5 };
Stats<Double> dob = new Stats<Double>(dnums);
double w = dob.average(); System.out.println("dob average is " + w);
Все права защищены. www.haulmont.ru info@haulmont.com |
© HAULMONT, 2013 |
