Sobes.tech
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.