Middle
Czym są typy generyczne?
sobes.tech AI
Odpowiedź od AI
Typy generyczne (Generics) to narzędzie parametryzacji typów, które pozwala na tworzenie uniwersalnych klas, interfejsów i metod. Umożliwiają one pracę z różnymi typami danych bez utraty bezpieczeństwa typów podczas kompilacji.
Główne zalety korzystania z Generics:
- Bezpieczeństwo typów: Kompilator sprawdza zgodność typów na etapie kompilacji, pomagając wykryć potencjalne błędy przed uruchomieniem programu.
- Zmniejszenie duplikacji kodu: Można stworzyć jedną klasę lub metodę, która działa z różnymi typami, zamiast pisać oddzielny kod dla każdego typu.
- Lepsza czytelność kodu: Użycie typów generycznych sprawia, że kod jest bardziej zrozumiały, wskazując, z jakimi typami danych pracuje.
- Brak konieczności jawnego rzutowania (casting): Pracując z kolekcjami generycznymi, nie ma potrzeby jawnego rzutowania elementów na potrzebny typ podczas ich pobierania.
Przykład użycia w Java:
// Tworzenie listy, która może przechowywać tylko łańcuchy znaków
List<String> stringList = new ArrayList<>();
stringList.add("cześć");
// stringList.add(123); // Błąd kompilacji, ponieważ 123 nie jest łańcuchem znaków
// Pobranie elementu bez konieczności rzutowania
String pierwszyElement = stringList.get(0);
Przykład użycia w C#:
// Tworzenie listy, która może przechowywać tylko liczby całkowite
List<int> intList = new List<int>();
intList.Add(10);
// intList.Add("świat"); // Błąd kompilacji, ponieważ "świat" nie jest liczbą całkowitą
// Pobranie elementu bez konieczności rzutowania
int liczba = intList[0];
Przykład klasy generycznej:
// Klasa generyczna Box, która może przechowywać obiekt dowolnego typu T
public class Box<T> {
private T item;
public void setItem(T item) {
this.item = item;
}
public T getItem() {
return item;
}
}
// Użycie klasy generycznej
Box<Integer> intBox = new Box<>();
intBox.setItem(123);
int intValue = intBox.getItem(); // Brak konieczności rzutowania
Box<String> stringBox = new Box<>();
stringBox.setItem("test");
String stringValue = stringBox.getItem(); // Brak konieczności rzutowania
W ten sposób, typy generyczne są potężnym narzędziem do tworzenia elastycznego, bezpiecznego i łatwego w utrzymaniu kodu.