
Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
|
25.12.2014, 10:02
|
|||
|---|---|---|---|
Вопрос по использованию генериков |
|||
|
#18+
Есть два класса Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Как правильно в интерфейсе E<K, V> описать метод entrySet? Пробовал так: Set<Map.Entry<K, Collection<V>>> entrySet(); Получил ошибки типа: "return type Set<Entry<K#1,Set<V#1>>> is not compatible with Set<Entry<K#1,Collection<V#1>>>" Еще пробовал так: Set<Map.Entry<K, ? extends Collection<V>>> entrySet(); Тоже ругается: "return type Set<Entry<K#1,Set<V#1>>> is not compatible with Set<Entry<K#1,? extends Collection<V#1>>>" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
25.12.2014, 10:23
|
|||
|---|---|---|---|
|
|||
Вопрос по использованию генериков |
|||
|
#18+
[quot eml78]Есть два класса Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Как правильно в интерфейсе E<K, V> описать метод entrySet? Код: sql 1. Интересно, почему не прокатывает просто Код: sql 1. а это проходит? Код: sql 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
25.12.2014, 10:26
|
|||
|---|---|---|---|
Вопрос по использованию генериков |
|||
|
#18+
а это проходит? <C extends Collection<V>> Set<Map.Entry<K, ? extends Collection<V>>> entrySet(); Проверил - все нормальн!!! А почему так? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
25.12.2014, 10:31
|
|||
|---|---|---|---|
Вопрос по использованию генериков |
|||
|
#18+
Так <C extends Collection<V>> Set<Map.Entry<K, C>> entrySet(); тоже работает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
25.12.2014, 11:27
|
|||
|---|---|---|---|
|
|||
Вопрос по использованию генериков |
|||
|
#18+
eml78Так <C extends Collection<V>> Set<Map.Entry<K, C>> entrySet(); тоже работает. Ну это-то логично. А C, видимо, помогает компилятору разобраться во всём этом безобразии. eml78А почему так? А про что вопрос? ;) Если про то, зачем вообще нужен extends. Рассмотрим метод интерфейса вернул Код: sql 1. Я могу в возвращённое значение запихнуть ещё одну Map.Entry<K, Collection<V>>. Причём в качестве значения Entry можно запихнуть любое значение. Логично? А вот если мне вернут Код: sql 1. то ничего туда вставить нельзя. Потому что я не знаю, какие конкретно value лежат в Entry, и компилятор этого проверить не может (следствие отказа от сохранения типа дженерика). В результате это путь для возврата коллекций, которые нельзя дополнить (это следствие изначальной ошибки дизайна коллекций в java - надо было делать "Collection extends ReadOnlyCollection", "List extends ReadOnlyList, Collection" и т.п.). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|

start [/forum/topic.php?fid=59&tablet=1&tid=2126019]: |
0ms |
get settings: |
6ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
147ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
36ms |
get tp. blocked users: |
1ms |
| others: | 194ms |
| total: | 416ms |

| 0 / 0 |
