2012-04-26 11 views

Odpowiedz

5

Dla typów takich jak Lista lub ArrayList nie powinno być żadnych kompilacji, a powinieneś zwrócić List promujący Code to an interface.

Znajdziecie w tym swój własny ograniczony sposób, tak jak miało to miejsce w przypadku Pakietu Współbieżności, takiego jak CopyOnWriteArrayList, i używano takich metod, jak addIfAbsent, które nie są zdefiniowane w interfejsie List.

Więc jeśli wrócić ArrayList ani żadnej konkretnej implementacji dla tej sprawy można wykorzystać API, które nie są określone w umowie (List interfejsu), ale wtedy są ograniczone zmiana spowoduje od konkretnej implementacji do czegoś innego (z ArrayList do LinkedList), ponieważ wszyscy korzystający z Twojego API będą musieli się zmienić zgodnie ze zmianami, zbyt wiele by się spodziewać.

4

Implikacją jest to, że nie można wywoływać metod ArrayList, które nie są metodami interfejsu List dla zwracanych obiektów.

Ale jeśli obiekt jest ArrayList, można wykonać rzutowanie.

2

Jedynym powodem, aby powrócić do konkretnej klasy, może być fakt, że osoba dzwoniąca musi być świadoma tej konkretnej implementacji lub, być może, dodatkowych interfejsów dotyczących konkretnej implementacji. Na przykład w Androidzie często musisz używać ArrayList, ponieważ framework nie wie, jak poprawnie serializować ogólny interfejs list.

15

Najlepiej jest zwrócić typ najbardziej typowy dla danego interfejsu.

Jeśli istnieje powód, dla którego ArrayList jest z natury odpowiedni dla danych, które powracasz, powinieneś go użyć. Zazwyczaj Lista jest w porządku, ale można również rozważyć użycie Collection jeśli wartości zwracane są z natury nieuporządkowane:

Diagram of Java collections hierarchy

+2

+1 na zdjęciu :) –

+1

Dziękuję za schematem –