Middle
Kas yra bendrieji tipai (Generics)?
sobes.tech AI
Atsakymas iš AI
Bendrieji tipai (Generics) yra priemonė tipų parametrizacijai, leidžianti kurti universalius klases, sąsajas ir metodus. Jie leidžia dirbti su įvairiais duomenų tipais be tipo saugumo praradimo kompiliavimo metu.
Pagrindiniai generics naudojimo privalumai:
- Tipų saugumas: Kompiliatorius tikrina tipų atitiktį kompiliavimo metu, padedant aptikti galimas klaidas prieš programos paleidimą.
- Kodo dubliavimosi mažinimas: Galite sukurti vieną klasę ar metodą, kuris veikia su skirtingais tipais, vietoje rašymo atskiro kodo kiekvienam tipui.
- Kodo skaitomumo gerinimas: Bendrieji tipai daro kodą aiškesnį, nurodydami, su kokiais duomenų tipais jis dirba.
- Reikalingumo išnykimas aiškiems tipų konvertavimams (casting): Dirbant su bendrosiomis kolekcijomis, nėra būtinybės aiškiai konvertuoti elementus į reikiamą tipą išgavus.
Pavyzdys Java kalba:
// Sąrašas, kuris gali saugoti tik eilutes
List<String> stringList = new ArrayList<>();
stringList.add("hello");
// stringList.add(123); // Kompiliatoriaus klaida, nes 123 nėra eilutė
// Elemento gavimas be tipo konvertavimo
String firstElement = stringList.get(0);
Pavyzdys C# kalba:
// Sąrašas, kuris gali saugoti tik sveikus skaičius
List<int> intList = new List<int>();
intList.Add(10);
// intList.Add("world"); // Kompiliatoriaus klaida, nes "world" nėra sveikas skaičius
// Elemento gavimas be tipo konvertavimo
int number = intList[0];
Bendrasis klasės pavyzdys:
// Bendroji klasė Box, kuri gali saugoti bet kokio tipo objektą T
public class Box<T> {
private T item;
public void setItem(T item) {
this.item = item;
}
public T getItem() {
return item;
}
}
// Bendrosios klasės naudojimas
Box<Integer> intBox = new Box<>();
intBox.setItem(123);
int intValue = intBox.getItem(); // Nereikia konvertuoti
Box<String> stringBox = new Box<>();
stringBox.setItem("test");
String stringValue = stringBox.getItem(); // Nereikia konvertuoti
Taigi, generiniai tipai yra galingas įrankis kuriant lankstų, saugų ir lengvai prižiūrimą kodą.