Czy jest jakaś różnica między dwiema liniami w następującychPrzypisywanie ArrayList do listy
ArrayList<String> arrName = new ArrayList<String>();
List<String> arrName = new ArrayList<String>();
Dzięki za odpowiedź
Czy jest jakaś różnica między dwiema liniami w następującychPrzypisywanie ArrayList do listy
ArrayList<String> arrName = new ArrayList<String>();
List<String> arrName = new ArrayList<String>();
Dzięki za odpowiedź
Prawie zawsze drugi preferowany jest od pierwszego. Druga ma tę zaletę, że implementacja List
może się zmienić (na przykład na LinkedList
), bez wpływu na resztę kodu. To będzie trudne do zrobienia z ArrayList
, nie tylko dlatego, że będziesz musiał zmienić ArrayList
na LinkedList
wszędzie, ale także dlatego, że mogłeś użyć konkretnych metod.
Ten ostatni jest zwykle zalecane tak długo, jak trzeba tylko interfejs List
później. To się nazywa "programowanie do interfejsu, a nie implementacja".
Co do szczegółowego różnicy między nimi, mam odpowiedzieć innym pytaniem na stackoverflow: The difference between "C c = new C()" and "A c = new C()" when C is a subclass of A in Java
Drugie podejście jest zazwyczaj preferowana, ponieważ ukrywa się za implementację interfejsu.
Oznacza to, że w dalszej kolejności, jeśli wymagania ulegną zmianie i będą wymagać kolejnej implementacji interfejsu List
, możesz zmienić tylko jedną linię kodu, a wszystko inne będzie nadal działać, ponieważ kodujesz do interfejsu, a nie do klasy .
Nie ma dużej różnicy per se, ale List
stosuje się o ile to możliwe, ponieważ jest to interfejs i można zobaczyć w metodach parametrów standardowych bibliotek są ogólnie List<K>
, tak że jakiekolwiek konkretne wdrożenie mogą być przekazywane, jak ArrayList
lub LinkedList
.
Spróbuj ukryć określoną implementację za interfejsem, gdy tylko jest to możliwe. see this
Drugi to przykład Program to Interface
i jest to preferowany sposób.
Szczegóły What does it mean to "program to an interface"?
Widziałem to samo pytanie (nawet ten sam tekst) od wczoraj do dzisiaj (ale nie mogę go znaleźć). –
Och i C Dzięki i tak –
@ LuiggiMendoza. Nawet ja. –