Sobes.tech
Middle

Koje mogućnosti pružaju Generics?

sobes.tech АИ

Одговор од АИ

Generici (opšti tipovi) pružaju sledeće prednosti:

  • Ponovna upotreba koda: Kreiranje klasa, interfejsa i metoda koji mogu raditi sa objektima različitih tipova bez gubitka sigurnosti tipova.
  • Sigurnost tipova tokom kompilacije: Kompajler može proveriti ispravnost korišćenja tipova i sprečiti greške tokom izvršenja povezane sa konverzijama tipova.
  • Poboljšana čitljivost koda: Izričito navođenje tipova u potpisima metoda i deklaracijama klasa čini kod razumljivijim.
  • Povećanje performansi (u nekim jezicima): U jezicima gde su generici implementirani putem brisanja tipova (npr. Java), to se postiže eliminacijom potrebe za konverzijama tipova tokom izvršenja. U jezicima gde su implementirani putem monomorfizma (npr. C++ šabloni), to može dovesti do povećanja veličine koda, ali potencijalno do bržeg rada eliminacijom dinamičkih poziva.
  • Kompatibilnost sa kolekcijama: Olakšava rad sa kolekcijama, omogućavajući da se navede tip elemenata koje kolekcije sadrže.

Primer u Javi:

// Bez generika
List list = new ArrayList();
list.add("string");
// Pri izvlačenju je potrebna konverzija tipa, mogući ClassCastException
String s = (String) list.get(0);

// Sa genericima
List<String> stringList = new ArrayList<>();
stringList.add("string");
// Nije potrebna konverzija tipa, sigurnost tipova je garantovana
String s2 = stringList.get(0);
// Greška pri pokušaju dodavanja nespojivog tipa
// stringList.add(123);

Primer u C#:

// Bez generika
ArrayList list = new ArrayList();
list.Add("string");
// Pri izvlačenju je potrebna konverzija tipa
string s = (string) list[0];

// Sa genericima
List<string> stringList = new List<string>();
stringList.Add("string");
// Nije potrebna konverzija tipa
string s2 = stringList[0];
// Greška pri kompilaciji
// stringList.Add(123);