Microsoft Word кл программирование на Java 2020 Зорина docx



Pdf көрінісі
бет53/65
Дата17.10.2023
өлшемі3,23 Mb.
#117230
түріРеферат
1   ...   49   50   51   52   53   54   55   56   ...   65
Ограничение сверху. 
Определяет отношение восходящего преобразования: 
 
Некоторый конкретный тип, параметр которого наследуется от 
super

List fruits = new ArrayList(); 
//
Все
методы
add 
не
работают
с
ошибкой
компиляции
fruits.add(new Object()); 
fruits.add(new Fruit()); 
fruits.add(new Apple()); 
fruits.add(new Citrus()); 
fruits.add(new Orange()); 
//
Этот
метод
работает
Object o = fruits.get(0); 
//
Остальные
методы
get 
не
работают

потому
что
get 
возвращает
Object 
и
нужно
приводить
объект
у
нужному
типу
Fruit f = fruits.get(0); 
Apple a = fruits.get(0); 
Citrus c = fruits.get(0); 
Orange or = fruits.get(0); 
Маски 
\\
Метод
компилируется
public static List getList() { 
List fruits = new ArrayList(); 


111 
fruits.add(new Apple()); 
return fruits; 

List wFruits1 = 
getList
(); \\
Работает
List wFruits2 = 
getList
();\\
Ошибка
компиляции
List wFruits3 = 
getList
();\\
Ошибка
компиляции
public static void addToList(List fruits) { 
\\add 
не
работают
все
fruits.add(new Fruit()); 
fruits.add(new Apple()); 
fruits.add(new Citrus()); 
fruits.add(new Orange()); 
Object o = fruits.get(0); \\
работает
\\
остальные
get 
не
работают
Fruit f = fruits.get(0); 
Citrus c = fruits.get(0); 
Orange
 or = fruits.get(0); 

//
все
вызовы
не
вызывают
ошибки
компиляции
addToList(new ArrayList()); 
addToList(new ArrayList()); 
addToList(new ArrayList()); 
addToList(new ArrayList()); 
Ограничение снизу. 
Определяет ограничение супертипа: 
 
Некоторый конкретный тип, параметр которого является суперклассом для 
sub

Имеется:
List list = new ArrayList(); 
Map> m =
new HashMap>(); 
// 
Зачем
два
раза
писать
одно
и
то
же
??? 
Необходимо: 


112 
List list = new ArrayList<>(); 
Map> m =
new HashMap<>(); 
Вывод типа (type inference) (Java 1.7) 
Можно использовать, если компилятор из контекста может понять, какие типы 
нужны. 
<> – «алмазная запись» (diamond notation)
В основном используется при создании объектов в ходе инициализации 
переменных. При создании объектов нельзя путать отсутствие указания типа (будет 
обобщенный тип) и оператор алмаз (будет вывод типа). Из-за механизма стирания в 
параметризованных типах могут возникать непроверяемые компилятором 
приведения. 
 


113 
Лекция 6. Абстрактные типы данных и их реализация на 
Java. Поведенческие паттерны
6.1 Использование регулярных выражений в Java. 
Регулярные выражения — это инструмент, который задает шаблон для строк. 
Если у программиста стоит задача обработать большой набор строк и отыскать в нем 
нужную или проверить соответствует ли входящая строка определенному правилу 
оптимальное решение - регулярные выражения. Ниже, на рисунке 6.1, приведен 
пример использования регулярных выражений. 
Рисунок 6.1 – Пример использования регулярных выражений 
import java.util.regex.Pattern;
public class RegexExample {
public static void isPasswordOK(String password) {
if(Pattern.matches("admin", password)) {
System.out.println("Hi admin");
}
}
public static void main(String[] args) { 
isPasswordOK("admin"); }

Пакет 
java.util.regex
включает три важных класса: 
Pattern

Matcher

PatternSyntaxException
и интерфейс 
MatchResult

Синтаксис регулярных выражений 


114 
Интерфейс 
MatchResult
— результат операции сравнения. Класс 
Matcher
механизм, который выполняет операции сопоставления последовательности 
символов путем интерпретации шаблона
Класс 
Pattern
— скомпилированное представление регулярного выражения. 
У класса 
Pattern
есть метод 
compile()
, который возвращает 
Pattern

соответствующий регулярному выражению. Метод 
matches
— сравнивает 
выражение с набором символов и возвращает 
true

false
в зависимости от того 
совпали строки или нет. Например, проверка пароля, которую мы делали через метод 
equals
может быть реализована более элегантно с помощью метода 
matches

Класс Pattern 
Объект 
Pattern 
представляет собой скомпилированное представление 
регулярного выражения. Класс 
Pattern 
не предоставляет общедоступных 
конструкторов. Чтобы создать шаблон, вы должны сначала вызвать один из его 
открытых статических методов 
compile()
, который затем вернет объект 
Pattern

Эти методы принимают регулярное выражение в качестве первого аргумента.
Класс Matcher 
Объект 
Matcher
– это механизм, который интерпретирует шаблон и 
выполняет операции сопоставления с входной строкой. Как и класс 
Pattern

Matcher
не определяет общедоступных конструкторов. Вы получаете объект 
Matcher
, вызывая метод 
matcher()
для объекта 
Pattern

Класс PatternSyntaxException 
Объект PatternSyntaxException является непроверяемым исключением, которое 
указывает на синтаксическую ошибку в образце регулярного выражения. 
Правила написания: 
-
. — точка — это соответствие любому символу; 
-
^строка — находит регулярное выражение, которое должно совпадать в 
начале строки; 
-
строка$ — выражение, которое должно совпадать в конце строки; 
-
[абв] — только буквы а или б или в; 


115 
-
[абв][яю] — только буквы а или б или в, за которыми следуют я или ю; 
-
[^abc] — когда символ каретки появляется в качестве первого символа в 
квадратных скобках, он отрицает шаблон. Этот шаблон соответствует любому 
символу, кроме a или b или c. 
Метасимволы: 
-
\d — любая цифра — равнозначно [0-9]; 
-
\D — только не цифра — равнозначно [^0-9]; 
-
\s — символ пробела; 
-
\w — символ слова — равнозначно [a-zA-Z_0-9]. 
Квантификаторы 
-
* — символ звездочки означает от ноля до бесконечности; 
-
+ — символ может встречаться от одного или несколько раз, сокращенно 
{1,}; 
-
? — встречается ни разу или один раз, знак вопроса это сокращение для 
{0,1}; 
-
{X} — символ встречается X раз; 
-
{X,Y} — символ встречается от X до Y раз. 


Достарыңызбен бөлісу:
1   ...   49   50   51   52   53   54   55   56   ...   65




©emirsaba.org 2024
әкімшілігінің қараңыз

    Басты бет