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

Особенности переменного

количества аргументов

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

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