Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
65
Добавлен:
08.06.2015
Размер:
562.18 Кб
Скачать

java.util.Scanner

Использование

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

Лексема – обособленная посредством разделителей порция входных данных, определяемая регулярным выражением, задающим формат ввода

Разделители можно настроить

Шаблон регулярного выражения можно задать собственный

Существуют готовые методы для базовых типов данных

21

java.util.Scanner

Важные методы

boolean hasNextType(...)

Возвращает true, если доступна следующая лексема указанного типа, иначе false

boolean hasNext()

boolean hasNext(java.util.regex.Pattern

pattern)

boolean hasNext(String pattern)

boolean hasNextByte()

boolean hasNextBigInteger()

...

22

java.util.Scanner

Важные методы

Type nextType(...)

Возвращает значение следующей лексемы. Выбрасывает java.util.NoSuchElementException

String next()

String next(Pattern pattern)

String next(String pattern)

int nextInt()

double nextDouble()

...

23

java.util.Scanner

Пример использования

Scanner in = new Scanner(System.in); double sum = 0.0;

while (in.hasNext()) {

if (in.hasNextDouble()) sum += in.nextDouble();

else

if ((in.next()).equals("done")) break;

else return;

}

...

24

Проблема

Имеется:

List l = new LinkedList(); l.add(5);

Object I = l.get(0); int i = 0;

if (I instanceof Integer) i = (Integer)I;

Хотелось бы:

List<Integer> l = new LinkedList<Integer>(); l.add(5);

int i = l.get(0);

25

Обновленные коллекции

Все интерфейсы коллекций стали параметризованными

Включая итераторы!

Все классы коллекций стали параметризованными

Обновился класс java.util.Collections

Прежние методы модифицированы для работы с параметризованными типами

Появились новые методы

Появился новый тип оболочек (Checked), динамически обеспечивающих безопасность типов при работе с коллекцией

26

Проблема

Имеется:

public Circle createAnotherLikeThis(Circle circle) throws Throwable {

Class cls = circle.getClass();

Class[] types = {Double.TYPE};

Constructor constr = cls.getConstructor(types);

Object[] args = {circle.getR()};

return (Circle) constr.newInstance(args);

}

Хотелось бы:

public Circle createAnotherLikeThat(Circle circle) throws Throwable { Class<? extends Circle> cls = circle.getClass();

Constructor<? extends Circle> constr = cls.getConstructor(Double.TYPE);

return constr.newInstance(circle.getR());

}

27

Обновленная рефлексия

Классы Class, Constructor теперь настраиваемые

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

Добавлен интерфейс аннотированного элемента java.lang.reflect.AnnotatedElement

Этот интерфейс реализуются всеми классами, объекты которых представляют элементы, способные иметь аннотации

Методы интерфейса позволяют проверить наличие аннотации и получить объект аннотации

28

Пример использования аннотаций

import java.lang.annotation.*; import java.lang.reflect.*;

@Retention(RetentionPolicy.RUNTIME)

@interface MyAnnotation { String str(); int val(); }

class Meta {

@MyAnnotation(str = "Two parameters", val = 19) public static void myMeth(String str, int i) {

try {

Class c = Class.forName("Meta");

Method m = c.getMethod("myMeth", String.class, int.class); MyAnnotation a = m.getAnnotation(MyAnnotation.class); System.out.printf("%s %d", a.str(), a.val());

}

catch (Exception c) {/*Обработка*/};

}

public static void main(String[] args) { myMeth("test", 10);

}

}

29

Проблема

Имеется:

Заложенные в языке средства синхронизации и взаимодействия потоков инструкций универсальные, но низкоуровневые

Организация взаимодействия потоков часто требует значительных усилий при написании кода

Хотелось бы:

Высокоуровневый инструментарий

Готовые решения для часто встречающихся ситуаций

30

Соседние файлы в папке Лекции