|
|
|
Вопрос по использованию генериков
|
|||
|---|---|---|---|
|
#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:02 |
|
||
|
Вопрос по использованию генериков
|
|||
|---|---|---|---|
|
#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:23 |
|
||
|
Вопрос по использованию генериков
|
|||
|---|---|---|---|
|
#18+
а это проходит? <C extends Collection<V>> Set<Map.Entry<K, ? extends Collection<V>>> entrySet(); Проверил - все нормальн!!! А почему так? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2014, 10:26 |
|
||
|
Вопрос по использованию генериков
|
|||
|---|---|---|---|
|
#18+
Так <C extends Collection<V>> Set<Map.Entry<K, C>> entrySet(); тоже работает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2014, 10:31 |
|
||
|
Вопрос по использованию генериков
|
|||
|---|---|---|---|
|
#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" и т.п.). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2014, 11:27 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=38842417&tid=2126019]: |
0ms |
get settings: |
7ms |
get forum list: |
10ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
144ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
56ms |
get tp. blocked users: |
1ms |
| others: | 230ms |
| total: | 465ms |

| 0 / 0 |
