Generics в Java 1.5
От: Kobylansky Stanislav  
Дата: 23.05.05 11:18
Оценка: 411 (13)
Статья:
Generics в Java 1.5
Автор(ы): Kobylansky Stanislav
Дата: 22.05.2005
Наконец, свершилось то, чего так долго ждали java разработчики, вышла очередная версия java с поддержкой многих вещей, о которых давно мечтают разработчики. Одним из нововведений стали шаблоны. Как раз о них и пойдет речь в этой статье.


Авторы:
Kobylansky Stanislav

Аннотация:
Наконец, свершилось то, чего так долго ждали java разработчики, вышла очередная версия java с поддержкой многих вещей, о которых давно мечтают разработчики. Одним из нововведений стали шаблоны. Как раз о них и пойдет речь в этой статье.
Re: Generics в Java 1.5
От: dshe  
Дата: 29.08.05 08:39
Оценка: 2 (1)
Здравствуйте, Kobylansky Stanislav, Вы писали:

KS>Статья:

KS>Generics в Java 1.5
Автор(ы): Kobylansky Stanislav
Дата: 22.05.2005
Наконец, свершилось то, чего так долго ждали java разработчики, вышла очередная версия java с поддержкой многих вещей, о которых давно мечтают разработчики. Одним из нововведений стали шаблоны. Как раз о них и пойдет речь в этой статье.


Не могу написать лично, поэтому пишу в форум.

В статье в одном месте речь идет о lvalue (rvalue) и instanceof операторе. На мой взгляд, не совсем корректно использовать такие термины как rvalue и lvalue в данном контексте. Насколько я знаю, термин lvalue был позаимствован из C++ и означает выражение, которое имеет адрес и, как следствие, может находится слева от знака присваивания, и может передаваться в функции по ссылке. Но lvalue не означает левый операнд любого бинарного операнда.

В JLS операнды instanceof называются RelationalExpression (слева) и ReferenceType (справа). Думаю, что лучше было бы использовать их; либо просто: левый операнд, правый операнд.


Незначительные опечатки.
1.
List<String> strList = new ArrayList<String>();
strList.add("some text");
strList.add(new Integer());  // сообщение об ошибке компилятора
String str = strList.get(0);
Integer i = strList.get(0);  // сообщение об ошибке компилятора

скорее всего должно быть
List<String> strList = new ArrayList<String>();
strList.add("some text");
strList.add(new Integer(0));  // сообщение об ошибке компилятора
String str = strList.get(0);
Integer i = strList.get(0);  // сообщение об ошибке компилятора


2.
public class TreeMap<K,V> extends AbstractMap<K,V> 
  implements SortedMap<K,V>, Cloneable, Java.io.Serializable

должно быть
public class TreeMap<K,V> extends AbstractMap<K,V> 
  implements SortedMap<K,V>, Cloneable, java.io.Serializable

Похоже, Word подвел.
--
Дмитро
Re[2]: Generics в Java 1.5
От: StanislavK Великобритания  
Дата: 30.08.05 07:37
Оценка:
Здравствуйте, dshe, Вы писали:

D>В статье в одном месте речь идет о lvalue (rvalue) и instanceof операторе. На мой взгляд, не совсем корректно использовать такие термины как rvalue и lvalue в данном контексте. Насколько я знаю, термин lvalue был позаимствован из C++ и означает выражение, которое имеет адрес и, как следствие, может находится слева от знака присваивания, и может передаваться в функции по ссылке. Но lvalue не означает левый операнд любого бинарного операнда.

D>В JLS операнды instanceof называются RelationalExpression (слева) и ReferenceType (справа). Думаю, что лучше было бы использовать их; либо просто: левый операнд, правый операнд.

Согласен. Подправлю как только, так сразу.

D>Незначительные опечатки.

Опечатки тоже надо искоренить.

Спасибо!
Re: Generics в Java 1.5
От: svd71 http://visualdesigner.fatal.ru/
Дата: 03.01.08 11:11
Оценка:
Здравствуйте, Kobylansky Stanislav, Вы писали:

KS>Статья:

KS>Generics в Java 1.5
Автор(ы): Kobylansky Stanislav
Дата: 22.05.2005
Наконец, свершилось то, чего так долго ждали java разработчики, вышла очередная версия java с поддержкой многих вещей, о которых давно мечтают разработчики. Одним из нововведений стали шаблоны. Как раз о них и пойдет речь в этой статье.


KS>Авторы:

KS> Kobylansky Stanislav

нашел одну ошибку:
Маски без ограничений: "...Вызывать методы, принимающие ссылки на тип, определенный такой маской, нельзя."
в eBook записано и проверено в коде:
When using a wildcard, List<?>, any generic type can be assigned to the
reference, but for access only, no modifications.

если к описанию еше можно применить оговорки, то в примере определенно нет! добавленниы код

String s = objs.get(0);

будет компилиться и работать.
Re[2]: Generics в Java 1.5
От: Blazkowicz Россия  
Дата: 03.01.08 11:18
Оценка: +1
Здравствуйте, svd71, Вы писали:
S>нашел одну ошибку:
S>Маски без ограничений: "...Вызывать методы, принимающие ссылки на тип, определенный такой маской, нельзя."
А если фразу выделить жирным до конца, то окажется что и ошибки никакой нет.
Re[3]: Generics в Java 1.5
От: svd71 http://visualdesigner.fatal.ru/
Дата: 03.01.08 13:02
Оценка:
Здравствуйте, Blazkowicz, Вы писали:

B>Здравствуйте, svd71, Вы писали:

S>>нашел одну ошибку:
S>>Маски без ограничений: "...Вызывать методы, принимающие ссылки на тип, определенный такой маской, нельзя."
B>А если фразу выделить жирным до конца, то окажется что и ошибки никакой нет.

" E get(int index);" тоже относится к Generic, но работает с декларацией
Re[4]: Generics в Java 1.5
От: svd71 http://visualdesigner.fatal.ru/
Дата: 03.01.08 13:07
Оценка:
Здравствуйте, svd71, Вы писали:

S>Здравствуйте, Blazkowicz, Вы писали:


B>>Здравствуйте, svd71, Вы писали:

S>>>нашел одну ошибку:
S>>>Маски без ограничений: "...Вызывать методы, принимающие ссылки на тип, определенный такой маской, нельзя."
B>>А если фразу выделить жирным до конца, то окажется что и ошибки никакой нет.

S>" E get(int index);" тоже относится к Generic, но работает с декларацией

S>

хотя ваша правда — она не принимает тип, но отдает.
почему я обратил на это внимание — подготовка к сертификации. Но статья вводит в некоторое "неправильное"
понимание этого вопроса и потому может стоить потерянных ответов
Re[5]: Generics в Java 1.5
От: Blazkowicz Россия  
Дата: 03.01.08 13:29
Оценка:
Здравствуйте, svd71, Вы писали:

S>Но статья вводит в некоторое "неправильное" понимание этого вопроса и потому может стоить потерянных ответов

В чем состоит "введение в неправильное понимание"? В невнимательном прочтении? Или чем-то ещё?
Re[6]: Generics в Java 1.5
От: svd71 http://visualdesigner.fatal.ru/
Дата: 03.01.08 18:33
Оценка:
Здравствуйте, Blazkowicz, Вы писали:

B>Здравствуйте, svd71, Вы писали:


S>>Но статья вводит в некоторое "неправильное" понимание этого вопроса и потому может стоить потерянных ответов

B>В чем состоит "введение в неправильное понимание"? В невнимательном прочтении? Или чем-то ещё?

В основном именно в этом. После прочтения я был уверен, что это применимо ко всем методам с генериком. Но после попадания вопроса с с этой темой и не правильного ответа на него, начал перечитывать документацию к сертификации, где автор не поленился обратить на это внимание.
Re: Generics в Java 1.5
От: Cyberness  
Дата: 08.07.08 07:20
Оценка:
Здравствуйте, Kobylansky Stanislav, Вы писали:


В этом случае, при получении ссылки на объект, тип которого задан как ”?”, его можно интерпретировать только как Object. Это безопасно, т.к. все ссылочные типы являются предками Object. Вызывать методы, принимающие ссылки на тип, определенный такой маской, нельзя.


Потомками?
Re: Generics в Java 1.5
От: mkizub Литва http://symade.tigris.org
Дата: 08.07.08 09:08
Оценка: 8 (2)
Здравствуйте, Kobylansky Stanislav, Вы писали:

KS>Статья:

KS>Generics в Java 1.5
Автор(ы): Kobylansky Stanislav
Дата: 22.05.2005
Наконец, свершилось то, чего так долго ждали java разработчики, вышла очередная версия java с поддержкой многих вещей, о которых давно мечтают разработчики. Одним из нововведений стали шаблоны. Как раз о них и пойдет речь в этой статье.


Почитал часть про маски. Очень мутная. Ни слова о том — ни зачем они, ни смысла их не раскрыто.
Суть масок очень простая — "? extends Type" выделяет (capture) только те члены (поля и методы)
которые можно "читать" (то есть брать значение поля и получать возвращаемое значение метода),
а "? super Type" наоборот, делает видимыми только те члены класса, которые можно "писать"
(то есть присваивать значения полям и использовать в качестве параметра при вызове методов).


class Type<T> {
 T field;
 T foo() { ... }
 void bar(T t) { ... }
}


Type<? extends String> — "видит" класс как

class Type<String> {
 @readonly String field;
 String foo() { ... }
}



Type<? super Number> — "видит" класс как

class Type<Number> {
 @writeonly Number field;
 void bar(Number t) { ... }
}
SOP & SymADE: http://symade.tigris.org , блог http://mkizub.livejournal.com
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.