Sobes.tech
Middle

Milyen lehetőségeket kínálnak a Generics?

sobes.tech MI

Válasz az MI-től

A generikusok (általános típusok) a következő lehetőségeket kínálják:

  • Kód újrafelhasználása: Osztályok, interfészek és metódusok létrehozása, amelyek különböző típusú objektumokkal működhetnek anélkül, hogy a típusbiztonságot elveszítenék.
  • Típusbiztonság fordítási időben: A fordító ellenőrizheti a típusok helyes használatát, és megelőzheti a futásidejű típuskonverziós hibákat.
  • A kód olvashatóságának javítása: A típusok egyértelmű megadása a metódus aláírásokban és osztálydeklarációkban könnyebben érthető kódot eredményez.
  • Teljesítmény növelése (egyes nyelveken): Olyan nyelvekben, ahol a generikusokat típuseltávolítással (pl. Java) valósítják meg, ez a futásidőben végzett típuskonverziók szükségességének kiküszöbölésével érhető el. Olyan nyelvekben, ahol monomorfizációval (pl. C++ sablonok) valósítják meg, ez a kód növekedéséhez vezethet, de potenciálisan gyorsabb futást eredményezhet a dinamikus hívások kiküszöbölésével.
  • Kompatibilitás gyűjteményekkel: Megkönnyíti a gyűjteményekkel való munkát, lehetővé téve a tárolt elemek típusának megadását.

Java példa:

// Generikusok nélkül
List list = new ArrayList();
list.add("string");
// A kivételkor típuskonverzió szükséges, lehetséges ClassCastException
String s = (String) list.get(0);

// Generikusokkal
List<String> stringList = new ArrayList<>();
stringList.add("string");
// Nincs szükség típuskonverzióra, a típusbiztonság garantált
String s2 = stringList.get(0);
// Fordítási hiba, ha nem kompatibilis típust próbálunk hozzáadni
// stringList.add(123);

C# példa:

// Generikusok nélkül
ArrayList list = new ArrayList();
list.Add("string");
// A kivételkor típuskonverzió szükséges
string s = (string) list[0];

// Generikusokkal
List<string> stringList = new List<string>();
stringList.Add("string");
// Nincs szükség típuskonverzióra
string s2 = stringList[0];
// Fordítási hiba
// stringList.Add(123);