|
|
|
Передача коллекции как коллекции с элементами класса-родителя (суперкласса)
|
|||
|---|---|---|---|
|
#18+
Здравствуйте! Задача такая: есть коллекция с элементами типа Subclass (класса-потомка), есть метод, которому в качестве параметра нужно передать либо массив либо коллекцию, но обязательно типа Superclass (класса-родителя). Если использовать массив типа класса-потомка, я могу его передавать как массив типа класса-родителя. Пример: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. Проблема в том, что использование массива мне не подходит. Но если вместо массива использовать коллекции, такой вариант уже не работает: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. Пока что нашел три варианта обхода: 1) Либо ArrayList переводить в массив такого же типа методом toArray: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 2) Либо ArrayList переводить в массив методом toArray, но уже в тип класса-родителя: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 3) Либо создавать новый ArrayList с типом класса-потомка, и в конструкторе передавать старый ArrayList с типом класса-родителя: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. Собственно, вопрос: а) Какой из трех вариантов предпочтительнее? б) Есть ли другие, более удачные варианты реализации передачи в метод массива или коллекции с элементами типа Superclass (класса-родителя), если есть коллекция с элементами типа Subclass (класса-потомка). Заранее благодарю за помощь! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2013, 21:05:49 |
|
||
|
Передача коллекции как коллекции с элементами класса-родителя (суперкласса)
|
|||
|---|---|---|---|
|
#18+
Либо так Код: java 1. тогда, правда на массив накладываются некоторые ограничения по добавлению либо так Код: java 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2013, 21:08:24 |
|
||
|
Передача коллекции как коллекции с элементами класса-родителя (суперкласса)
|
|||
|---|---|---|---|
|
#18+
Дженерики не ковариантны, поэтому и не работает. Иначе говоря, если Child extends Parent, то List<Child> вовсе не является потомком List<Parent>. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2013, 05:20:13 |
|
||
|
|

start [/forum/topic.php?fid=59&fpage=247&tid=2130089]: |
0ms |
get settings: |
20ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
54ms |
get topic data: |
13ms |
get forum data: |
4ms |
get page messages: |
56ms |
get tp. blocked users: |
2ms |
| others: | 332ms |
| total: | 503ms |

| 0 / 0 |
