Co zyskujemy pisząc
List<?> myList = new ArrayList<?>();
zamiast
ArrayList<?> myList = new ArrayList<?>();
Co zyskujemy pisząc
List<?> myList = new ArrayList<?>();
zamiast
ArrayList<?> myList = new ArrayList<?>();
W pierwszej opcji nie ograniczasz się do jednej implementacji.
Zauważ że List
to jest interfejs. Pisząc z lewej strony List
możesz potem do tej zmiennej podstawić inna implementacje List
, a nie tylko ArrayList
.
Alexandr.r napisał(a):
Co zyskujemy pisząc
List<?> myList = new ArrayList<?>();
zamiast
ArrayList<?> myList = new ArrayList<?>();
W takiej formie właściwie nie ma różnicy. Większość pisze to co jest krótsze.
Natomiast podczas deklarowania parametrów, lepiej zadeklarować przyjmowanie List<>
zamiast ArrayList<>
, by móc przekazać polimorficznie dowolną implementację List
.
Riddle napisał(a):
W takiej formie właściwie nie ma różnicy. Większość pisze to co jest krótsze.
Ogólnie zgoda, natomiast jest jeden mały fakt: zapis ogólny oznacza, że nie można wykorzystać metod właściwych dla ArrayList
.
Inna sprawa, że pisanie tego, co jest krótsze nie zawsze jest dobre. Czasami lepiej napisać ArrayList<?> myList = new ArrayList<>(capacity)
by dać światu znać, że kod został napisany z myślą o ArrayList
.
wartek01 napisał(a):
Riddle napisał(a):
W takiej formie właściwie nie ma różnicy. Większość pisze to co jest krótsze.
Ogólnie zgoda, natomiast jest jeden mały fakt: zapis ogólny oznacza, że nie można wykorzystać metod właściwych dla
ArrayList
.
Jeśli chcemy wykorzystać metod właściwych dla ArrayList
, to całe to pytanie nie ma sensu.
Let me Chat GPT that for you:
@0xmarcin: Nie lubię tych odpowiedzi z ChatGPT, bo one się dzielą na dwie kategorię.
Zadajesz pytanie, i bot odpowiada:
Skąd pytający ma wtedy wiedzieć czy chat odpowiedział coś poprawnie czy jakiś bezsens?
W programowaniu warto określać to co myślisz najlepiej jak się da. Jeśli w danym miejscu nie dbasz o to jakiej implementacji listy używasz to użyj generycznego typu. W praktycznie każdym wypadku tak jest, bo wybór implementancji jest zazwyczaj podyktowany charakterystyką wydajnościową i jej użycie jest takie samo niezależnie od implementacji pod spodem
Alexandr.r napisał(a):
Co zyskujemy pisząc
List<?> myList = new ArrayList<?>();
zamiast
ArrayList<?> myList = new ArrayList<?>();
Tak na prawdę powinieneś zrobić krok wstecz i zapoznać się z polimorfizmem, bo na tym polega cała sztuczka. Bez tego ani rusz.