Collection, a List - interfejsy

0

Witam,
Mam pytanie odnośnie podstaw Javy. Wiem, że interfejs List rozszerza interfejs Collection.
Listy natomiast mają dwie implementacje: tablicową i powiązaną (w zależności od sytuacji używa się jednej albo drugiej).

W kodzie napisanym przez kolegę mam:

Collection<Typ> ref = new ArrayList<Typ>()

Zastanawia mnie roznica jesli zamiast Collection uzyje List:

List<Typ> ref = new ArrayList<Typ>()

Czy to sie czyms rozni? Generalnie interfejs Collection jest bardziej ogolny i obsluguje mniej operacji. Czy jesli referencja zostanie ustawiona na Collection, to dodatkowe metody udostepnione przez interfejs List w zmiennej nie beda dostepne (bo nie ma ich w Collection)?

Pozdrawiam,

2

Tak, będą dostępne jedynie operacje z Collection bez tych z List, o ile potem tego nie zrzutujesz na List. Ale dzięki temu możesz na przykład napisać metodę do sortowania wszystkich kolekcji ;)

1

Dodatkowo, poza ograniczeniem sobie API tylko do metod z Collection, będziesz miał ograniczony dostęp do różnych narzędzi dostarczonych out-of-box. Na pewno odpadnie wiele metod z klasy narzędziowej Collections i to tych najbardziej przydatnych czyli sort, shuffle i copy. Może się też okazać, że będziesz musiał rzutować w wielu miejscach do List ponieważ API jakiejś metody jest ograniczone.
Generalnie taka zmiana jest OK, ale należy się zastanowić czy nie przysporzy ona problemów. Na początek proponuję napisać testy :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1