Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Технологии обработки информации на Java. Учебное пособие

.pdf
Скачиваний:
0
Добавлен:
08.09.2026
Размер:
2 Мб
Скачать
тривиальны (т.е. состоят из одного типа). Формы выражения границ имеют ограничения (т.е. только первый элемент может быть классом или типовой пе­ременной, и только одна типовая переменная может быть использована при указании границ) с целью того, чтобы исключить некоторые неловкие ситуа­ции, которые могут возникнуть. Однако capture conversion может приводить к появлению типовых переменных, чьи границы носят более общий характер (например, массивы).
2.10. Подтипы
Отношения подтипов и супертипов – это бинарные отношения на типах.
Супертипы для типов определяются с учетом рефлексивной и тран­зитивной замкнутости на непосредственных отношениях супертипов, ко­торые отображатся как S >
T, что будет описано в правилах далее в этой
1
секции. Мы пишем S :> T для обозначения того, что между S и T суще­ствуют отношения супертипа.
S – это корректный супертип T, что пишется как S > T, если S :> T и S ≠ T.
Подтипы типа T – это все типы U такие, что T – это супертип U, и null type. Мы пишем T <: S, чтобы отобразить, что между T и S суще­ствуют отношения подтипа.
T – это корректный подтип S, что пишет
ся как T < S, если T <: S
и S T.
S, ес-
1
ли S >
T – это непосредственный подтип S, что отображается как T <
T.
1
Отношения подтипов не распространяются на параметризованные типы: T <: S не означает, что C<T> <: C<S>.
2.10.1. Отношения подтипов между примитивными типами
Следующие правила определяют отношения непосредственных су­пертипов между примитивными типами:
double >1 float
float >1 long
long >1 int
int >1 char
int >1 short
short >1 byte
2.10.2. Отношения подтипов между Классами и Интерфейсами
Дано объявление генерик типа С<F
, …, Fn>, непосредственными
1
супертипами его параметризованного типа С<T
Непосредственный суперкласс для С.
, …, Tn> будут следующие:
1
41
Непосредственный суперинтерфейс для С.
Класс Object, если Сэто интерфейс, у которого нет непосред-
ственного суперинтерфейса.
Необработанный тип С.
Непосредственные супертипы параметризованного типа С<T1, …, Tn>, где T
для C<T
(1 i n) – это типы:
i
D<U
,...,Tn> и θ это подстановка для [F1:=T1,...,Fn:=Tn].
1
C<S
θ,...,Uk θ>, где D<U1,...,Uk> это непосредственный супертип
1
,...,Sn>, где Si содержит Ti (1 i n) (§4.5.1).
1
Непосредственный супертип параметризованного типа C<R где по меньшей мере один из R ственный супертип для C<X
1
(1 i n) маска типа, – это непосред-
i
,...,Xn>, который является результатом приме-
нения capture conversion к C<R1,...,Rn>.
Непосредственные супертипы типового пересения T (1 ≤ i ≤ n).
Непосредственные супертипы типоповой переменной – это все типы, указанные в качестве его границ.
Типовая переменная – это непосредственный супертип его нижней границы.
Непосредственный супертип null типа – это все ссылочные типы, кроме самого null типа.
2.10.3. Отношения подтипов между Массивами
Следующие правила определяют непосредственные супертипы среди массивов:
,...,Rn>,
1
& ... & Tn это Ti
1
Если S и T оба являются ссылочными типами, тогда S[ ] > если и только если S >
Object >
Object[ ]
1
Cloneable >
T.
1
Object[ ]
1
java.io.Serializable >
Если P это примитивный тип, тогда:
o Object >
o Cloneable >
P[ ]
1
P[ ]
1
o java.io.Serializable >
2.11. Где используются Типы
Типы используются тогда, когда они появляются в объявлениях или в каких-либо выражениях.
Пример 2.8-1. Необработанные Типы
import java.util.Random;
import java.util.Collection;
import java.util.ArrayList;
42
Object[ ]
1
P[ ]
1
T[ ]
1
class MiscMath<T extends Number> {
int divisor; MiscMath(int divisor) { this.divisor = divisor; } float ratio(long l) { try { l /= divisor; } catch (Exception e) { if (e instanceof ArithmeticException) l = Long.MAX_VALUE; else l = 0; } return (float)l; } double gausser() { Random r = new Random(); double[] val = new double[2]; val[0] = r.nextGaussian(); val[1] = r.nextGaussian(); return (val[0] + val[1]) / 2; } Collection<Number> fromArray(Number[] na) { Collection<Number> cn = new ArrayList<Number>(); for (Number n : na) cn.add(n); return cn; } <S> void loop(S s) { this.<S>loop(s); }
}
В этом примере в объявлениях используются следующие типы: – импортированные типынапример, объявлен тип Random, импортиро-
ванный из типа java.util.Random пакета package java.util;
поля, как статические, так и поля объекта класса, и константы интерфей-
совнапример, в классе MiscMath объявлено поле divisor типа int;
параметры методанапример, в методе ratio объявлен параметр l типа
long;
возвращаемый тип метода – например, объявлено, что метод ratio возвра-
щает значение типа float, а метод gausser возвращает значение типа double;
– параметры констру
объявлен параметр типа int.
– локальные переменные. Объявленные в методе gausser локальные
переменные r и val имеют типы Random и double[ ] (массив компонент типа
double);
параметры исключенийнапример объявленный в секции catch пара-
метр исключения e имеет тип Exception;
типовый параметр. Например, типовый па
типовая переменная T, у которой тип Number объявлен в качестве границы;
В любых объявлениях, использующих параметризованные типы: напри-
мер, тип Number использован как типовый аргумент в параметризованном типе
Collection<Number>.
ктора – например, у конструктора класса MiscMath
раметр класса MiscMath – это
43
Кроме типов, в примере используются следующие выражения:
Выражение создания экземпляра класса; например в методе gausser ло-
кальная переменная r инициализирована выражением создания экземпляра клас­са, которое использует тип Random.
Выражение создания экземпляра генерик класса; например Number ис-
пользован как типовый аргумент в выражении new ArrayList<Number>()
Выражение создания массива; например в методе gausser локальная пе-
ременная val инициализирована с использованием выражения создания массива, который создает массив типа double с размером 2
Вызов генерик метода или конструктора; например метод loop вызыва-
ет сам себя с явным указанием типового аругмента S
Касты; например инструкция return метода ratio использует каст к типу
float
Оператор instanceof; например в этом примере оператор instanceof про-
веряет, является ли переменная e совместимой с типом ArithmeticException
44
КОНТРОЛЬНЫЕ ВОПРОСЫ
1. На какие три типа делятся типы данных в языке Java?
2. Какие операции применимы к примитивным типам?
3. Какие операции применимы к ссылочным типам?
4. Что такое класс-обертка?
5. Какие исключительные ситуации могут возникнуть при выполне-
нии операций с примитивными типами?
6. Что такое типовое пересечение?
7. Чем отли
чается обобщенный (генерик) класс от обычного класса?
8. Что такое маска типа?
9. Как можно ограничить маску типа?
10. Как преобразовать значение логического типа в целочисленное
значение?
11. Какой код используется для хранения целых чисел?
12. Как хранятся вещественные числа в Java?
13. Как представляются символьные значения в Java?
14. Что такое параметр
изованный класс?
15. Что такое материализованный тип?
16. Почему в Java разрешены необработанные типы?
17. Что такое отношение подтипов?
18. Что такое ковариантность массивов?
19. Могут ли методы быть обобщенными (генерик)?
20. Какие методы поддерживает класс Object?
45
СПИСОК ЛИТЕРАТУРЫ
1. Хорстманн К., Корнелл Г. Java 2. Библиотека профессионала, 8 редакция.
В 2 томах. – М.: Вильямс, 2012.
2. Эккель Б. Философия Java. 4-я ред. – СПб.: Питер, 2009.
3. Блинов И.Н., Романчик В.С. Java 2. Java промышленное программирование. –
Минск: Издательское УП «УниверсалПресс», 2007.
4. Eckel B. Thinking In Java 4th edition Издательство: Prentice Hall, 2006.
5. Horstmann C. Java Concepts. – Wiley, 2010.
6. Bloch J. Effective Java 2nd edition. – Prentice Hall, 2006.
7. The Java Language Specification Java SE 7 Edition / J. Gosling, B. Joy, G. Steele,
G. Bracha, A. Buckley. – Prentice Hall, 2012.
8. Gupta M. OCA Java SE 7 Programmer I. Certification Guide. – Manning, 2013 г.
46
Учебное издание
ЕРМАКОВ Александр Вадимович
ТЕХНОЛОГИИ ОБРАБОТКИ ИНФОРМАЦИИ НА JAVA
Учебное пособие
Редактор К.А. Кулагина
Компьютерная верстка Т.В. Семёновой
Подписано в печать 26.01.15. Формат 60×84 1/16
Бум. офсет Усл. печ.л. 2,79 (3,0) Уч.-изд.л. 2,8 Тираж 100 экз. Заказ 21 С 11
Саратовский государственный технический университет
410054, Саратов, Политехническая ул., 77.
Отпечатано в Издательстве СГТУ. 410054, Саратов, Политехническая ул., 77.
Тел.: 24-95-70, 99-87-39, E-mail: izdat@sstu.ru
47
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]