Ильдар Хабибуллин - Java 7 [Наиболее полное руководство]
- Название:Java 7 [Наиболее полное руководство]
- Автор:
- Жанр:
- Издательство:БХВ-Петербург
- Год:2012
- ISBN:978-5-9775-0735-6
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Ильдар Хабибуллин - Java 7 [Наиболее полное руководство] краткое содержание
Java 7 [Наиболее полное руководство] - читать онлайн бесплатно ознакомительный отрывок
Интервал:
Закладка:
public MyGenericClass2
makeClass2(S id, MyGenericClass data){
return new MyGenericClass2(id, data.getData());
}
public static void main(String[] args){
MyGenericClass dMyGen = new MyGenericClass<>(34.456);
MyGenericClass2Demo d = new MyGenericClass2Demo<>();
MyGenericClass2 ldMyGen2 = d.makeClass2(123456L, dMyGen);
}
}
В предыдущих главах мы часто пользовались тем, что можно определить ссылку типа суперкласса, ссылающуюся на объект подкласса, например:
Number n = new Long(123456L);
Number d = new Double(27.346);
Более того, это свойство распространяется на массивы:
Number[] n = new Long[100];
Можно ли распространить эту возможность на настраиваемые типы? Например, можно ли написать последний оператор листинга 4.3 так:
MyGenericClass2 n = // Сшибка!
d.makeClass2(123456L, dMyGen);
Ответ отрицательный. Из того, что какой-то класс B является подклассом класса A, не следует, что класс g будет подклассом класса g.
Это непривычное обстоятельство вынудило ввести дополнительную конструкцию — шаблон типа (wildcard type), применяемую в процессе настройки типа. Шаблон типа обозначается вопросительным знаком и означает "неизвестный тип" или "произвольный тип". Предыдущий код не вызовет возражений у компилятора, если написать его в таком виде:
MyGenericClass2 n =
d.makeClass2(123456L, dMyGen);
Такая запись будет почти эквивалентна записи
MyGenericClass2 n =
d.makeClass2(123456L, dMyGen);
за тем исключением, что в первом случае компилятор сделает более строгие проверки.
Кроме записи [10];
Настраиваемые методы
Настраиваемыми могут быть не только типы, но и методы. Параметры настраиваемого метода (type parameters) указываются в заголовке метода в угловых скобках перед типом возвращаемого значения. Это выглядит так, как показано в листинге 4.4.
public class MyGenericClass2Demo{
public MyGenericClass2
makeClass2(S id, MyGenericClass data){
return new MyGenericClass2(id, data.getData());
} public static void main(String[] args){
MyGenericClass dMyGen = new MyGenericClass(34.456);
MyGenericClass2Demo d =
new MyGenericClass2Demo();
MyGenericClass2 ldMyGen2 = d.makeClass2(123456L, dMyGen);
}
}
Метод makeClass2 () описан в простом, ненастраиваемом, классе MyGenericClass2Demo, и его параметры задаются в угловых скобках . Здесь можно записывать ограниченные параметры
public
MyGenericClass2 makeClass2(S id, MyGenericClass data){
return new MyGenericClass2(id, data.getData());
}
Как видно из листинга 4.4, специально настраивать метод не нужно, конкретные типы его параметров и возвращаемого значения определяются компилятором по переданным в метод аргументам.
Как вы убедились из приведенных примеров, настраиваемые типы и методы допускают сложную структуру параметров, так же как и вложенные классы. Мы еще не касались вопросов наследования настраиваемых типов, реализации настраиваемых интерфейсов, создания массивов настраиваемых типов. Все эти вопросы подробно рассмотрены на сайте Анжелики Лангер (Angelika Langer), в ее Java Generics FAQ, http://
www.angelikalanger.com/GenericsFAQ/JavaGenericsFAQ.html.Класс Boolean
Это очень небольшой класс, предназначенный главным образом для того, чтобы передавать логические значения в методы по ссылке.
Конструктор Boolean (String s) создает объект, содержащий значение true, если строка s равна "true" в произвольном сочетании регистров букв, и значение false — для любой другой строки.
Статический метод valueOf(boolean b) позволяет получить объект класса Boolean из значения примитивного типа boolean.
Пользуясь автоматической упаковкой, можно определение
Boolean b = new Boolean("true");
или
Boolean b = Boolean.valueOf(true);
сократить до
Boolean b = true;
Метод booleanValue () возвращает логическое значение, хранящееся в объекте.
Статический метод parseBoolean(String s) возвращает значение true, если строка s равна "true" в произвольном сочетании регистров букв, и значение false — для любой другой строки.
Класс Character
В этом классе собраны статические константы и методы для работы с отдельными символами.
Статический метод
digit(char ch, in radix);
переводит цифру ch системы счисления с основанием radix в ее числовое значение типа
int.
Статический метод
forDigit(int digit, int radix);
выполняет обратное преобразование целого числа digit в соответствующую цифру (тип char) в системе счисления с основанием radix.
Основание системы счисления должно находиться в диапазоне от Character.MIN_RADIX до Character.MAX RADIX.
Метод toString () переводит символ, содержащийся в классе, в строку с тем же символом.
Статические методы toLowerCase(), toUpperCase(), toTitleCase() возвращают символ, содержащийся в классе, в указанном регистре. Последний из этих методов предназначен для правильного перевода в верхний регистр четырех кодов Unicode, не выражающихся одним символом.
Статический метод
getName(int code);
возвращает полное Unicode-имя символа по его коду code.
Множество статических логических методов проверяют различные характеристики символа, переданного в качестве аргумента метода:
□ isDefined () — выясняет, определен ли символ в кодировке Unicode;
□ isDigit () — проверяет, является ли символ цифрой Unicode;
□ isIdentifierIgnorable () — выясняет, нельзя ли использовать символ в идентификаторах;
□ isISOControl () — определяет, является ли символ управляющим;
□ isBmpCodePoint () — определяет, лежит ли код символа в диапазоне \u0000-\uFFFF;
□ isSupplementaryCodePoint () — определяет, что код символа больше \uFFFF;
□ isJavaIdentifierPart ( ) - выясняет, можно ли использовать символ в идентифика
торах;
Листинг 4.5. Методы классаCharacter в программеCharacterTest
Читать дальшеИнтервал:
Закладка: