Kokias galimybes suteikia Generics Java?
sobes.tech AI
Atsakymas iš AI
Generics Java kalba kodų tipų saugumą didina, užkertant kelią vykdymo metu atsirandantiems klaidoms, susijusioms su tipų konvertavimu. Pagrindinės galimybės:
-
Tipų tikrinimas kompiliacijos metu: Kompiliatorius tikrina, ar teisingai naudojami Generics nurodyti tipai, leidžiantys aptikti klaidas prieš programos paleidimą.
// Be Generics - gali būti ClassCastException List list = new ArrayList(); list.add("eilutė"); list.add(123); // Integer pridėjimas String s = (String) list.get(1); // Vykdymo klaida // Su Generics - klaida kompiliuojant List<String> stringList = new ArrayList<>(); stringList.add("eilutė"); // stringList.add(123); // Kompiliatoriaus klaida String str = stringList.get(0); // Saugi gavimas -
Tipų konvertavimo (type casting) pašalinimas: Generics pašalina poreikį aiškiai konvertuoti tipus gaunant elementus iš kolekcijų ar naudojant parametrizuotas klases.
// Be Generics List list = new ArrayList(); list.add("Labas"); String s = (String) list.get(0); // Aiškus konvertavimas // Su Generics List<String> stringList = new ArrayList<>(); stringList.add("Labas"); String str = stringList.get(0); // Konvertavimas nereikalingas -
Bendras kodas (Generics Methods, Generics Classes, Generics Interfaces): Leidžia kurti bendrus algoritmus ir duomenų struktūras, kurios veikia su įvairiais tipais, nesikartojant kodo.
// Bendra metodo funkcija spausdinti masyvą public static <T> void printArray(T[] array) { for (T element : array) { System.out.print(element + " "); } System.out.println(); } // Bendra klasė - reikšmių pora class Pair<K, V> { private K key; private V value; public Pair(K key, V value) { this.key = key; this.value = value; } public K getKey() { return key; } public V getValue() { return value; } } -
Wildcards palaikymas: Leidžia apibrėžti lankstesnius apribojimus tipams parametrizuotuose tipuose.
?(Unbounded Wildcard): Bet koks tipas.? extends T(Bendras Wildcard - viršutinė riba): Tipas turi būtiTarba jo potipis.? super T(Bendras Wildcard - apatinė riba): Tipas turi būtiTarba jo supertipas.
// Metodas, priimantis bet kokio tipo sąrašą public static void processList(List<?> list) { // ... } // Metodas, priimantis skaičių sąrašą arba jų potipius public static void processNumbers(List<? extends Number> list) { // ... } // Metodas, priimantis eilutės sąrašą arba jų supertipus public static void addStrings(List<? super String> list) { list.add("nauja eilutė"); } -
Naudojimas Collections Framework: Visos pagrindinės kolekcijų klasės (List, Set, Map ir kt.) yra parametrizuotos, todėl darbą su kolekcijomis galima saugiai ir patogiai atlikti.
Generics yra svarbus šiuolaikinės Java elementas, kuris didina kodo patikimumą ir skaitomumą.