![]() |
Модераторы: LSD, AntonSaburov |
![]() ![]() ![]() |
|
User008 |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 306 Регистрация: 9.9.2009 Репутация: нет Всего: 1 |
Объясните, пожалуйста, почему не принимается такая строка? |
|||
|
||||
LSD |
|
||||||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
Потому что
приводим к
но не
-------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
||||||
|
|||||||
Stolzen |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1041 Регистрация: 17.10.2005 Репутация: 23 Всего: 48 |
Ответ есть в item25 книги Effective Java, 2 ed:
Это сообщение отредактировал(а) Stolzen - 16.4.2012, 12:58 |
|||
|
||||
User008 |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 306 Регистрация: 9.9.2009 Репутация: нет Всего: 1 |
Спасибо. А как можно написать функцию, чтобы параметром была коллекция коллекций?
Это сообщение отредактировал(а) User008 - 16.4.2012, 13:19 |
|||
|
||||
Stolzen |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1041 Регистрация: 17.10.2005 Репутация: 23 Всего: 48 |
Попробуйте так |
|||
|
||||
LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
Как-то так
-------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
User008 |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 306 Регистрация: 9.9.2009 Репутация: нет Всего: 1 |
Спасибо. А можно пояснить в чём разница между этими двумя записями? То, что написано в Effective Java, 2 ed я не совсем понял.
В С++ используется Template и там у меня таких проблем не возникало если есть нужные методы. И что делает вопросительный знак? |
|||
|
||||
Stolzen |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1041 Регистрация: 17.10.2005 Репутация: 23 Всего: 48 |
Добавлено @ 13:38 Т.е. по простому говоря, программисту разрешается считывать элементы из коллекции так, как будто они все Iterable - но помещать туда ничего не разрешается Это сообщение отредактировал(а) Stolzen - 16.4.2012, 13:38 |
|||
|
||||
User008 |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 306 Регистрация: 9.9.2009 Репутация: нет Всего: 1 |
Т.е. один из вариантов, даёт возможность только читать и это ограничение порождает ещё и дополнительные проблемы, я правильно понял?
|
|||
|
||||
Stolzen |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1041 Регистрация: 17.10.2005 Репутация: 23 Всего: 48 |
Да нет, проблем вообщем-то никаких, если нужно только прочитать. Если нужно еще и добавить в коллекцию, то используйте
|
||||
|
|||||
User008 |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 306 Регистрация: 9.9.2009 Репутация: нет Всего: 1 |
А если я хочу возвращать объект того же типа, что и аргумент Iterable<Iterable<T>>, как мне это сделать?
Это сообщение отредактировал(а) User008 - 17.4.2012, 08:33 |
|||
|
||||
Stolzen |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1041 Регистрация: 17.10.2005 Репутация: 23 Всего: 48 |
Так, если я правильно понял вопрос |
||||
|
|||||
User008 |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 306 Регистрация: 9.9.2009 Репутация: нет Всего: 1 |
||||
|
||||
User008 |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 306 Регистрация: 9.9.2009 Репутация: нет Всего: 1 |
И что здесь неправильно?
Type parameter E cannot be installed directly. Это сообщение отредактировал(а) User008 - 17.4.2012, 11:13 |
|||
|
||||
LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
Во время выполнения информации о типе E не будет, потому конструкция new E() невалидна. Да и вообще явно же не каждый класс имеет конструктор по умолчанию ![]() -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
User008 |
|
||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 306 Регистрация: 9.9.2009 Репутация: нет Всего: 1 |
А я думал это во время компиляции проверяется. Добавлено @ 15:34 А здесь что не так?
error: invalid inferred types for I,T; inferred type does not conform to declared bound(s) inferred: HashSet<Integer> bound(s): Collection<Object> where I,E,T are type-variables: I extends Collection<T> declared in method <E,I,T>f(E) E extends Collection<I> declared in method <E,I,T>f(E) T extends Object declared in method <E,I,T>f(E) Это сообщение отредактировал(а) User008 - 17.4.2012, 16:03 |
||||
|
|||||
LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
А как во время компиляции узнать кто с каким значением E будет вызывать метод? Тут все так, javac 1.6.0_30 все нормально компилирует. -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
User008 |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 306 Регистрация: 9.9.2009 Репутация: нет Всего: 1 |
Спасибо.
Только я не понимаю как добавить новый элемент.
Это сообщение отредактировал(а) User008 - 18.4.2012, 04:18 |
|||
|
||||
Stolzen |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1041 Регистрация: 17.10.2005 Репутация: 23 Всего: 48 |
Создать элемент типа I нельзя - во время выполнения нет инофрмации о типе, LSD уже писал про это. Советую почитать подробнее, как устроены генерики в java, например, в главах из Effective Java по генерикам довольно много ролезной информации. |
|||
|
||||
User008 |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 306 Регистрация: 9.9.2009 Репутация: нет Всего: 1 |
Ок, спасибо.
|
|||
|
||||
![]() ![]() ![]() |
Правила форума "Java" | |
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Java: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |