Koje mogućnosti pružaju Generics u Javi?
sobes.tech АИ
Одговор од АИ
Generici u Javi povećavaju sigurnost tipova koda, sprečavajući greške tokom izvršavanja povezane sa prebacivanjem tipova. Glavne mogućnosti:
-
Provera tipova u fazi kompajliranja: Kompajler proverava ispravnost korišćenja tipova navedenih u genericima, što omogućava otkrivanje grešaka pre pokretanja programa.
// Bez generika - moguća ClassCastException List list = new ArrayList(); list.add("string"); list.add(123); // Dodavanje Integer String s = (String) list.get(1); // Greška tokom izvršavanja // Sa genericima - greška pri kompajliranju List<String> stringList = new ArrayList<>(); stringList.add("string"); // stringList.add(123); // Greška pri kompajliranju String str = stringList.get(0); // Sigurno dobijanje -
Uklanjanje prebacivanja tipova (type casting): Generici uklanjaju potrebu za eksplicitnim prebacivanjem tipova pri dobijanju elemenata iz kolekcija ili korišćenju parametrizovanih klasa.
// Bez generika List list = new ArrayList(); list.add("Zdravo"); String s = (String) list.get(0); // Eksplicitno prebacivanje // Sa genericima List<String> stringList = new ArrayList<>(); stringList.add("Zdravo"); String str = stringList.get(0); // Nije potrebno prebacivanje -
Opšti kod (Generics Methods, Generics Classes, Generics Interfaces): Omogućavaju kreiranje opštih algoritama i struktura podataka koji rade sa različitim tipovima, bez dupliranja koda.
// Opšta metoda za štampu niza public static <T> void printArray(T[] array) { for (T element : array) { System.out.print(element + " "); } System.out.println(); } // Opšta klasa - par vrednosti 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; } } -
Podrška za Wildcards: Omogućavaju definisanje fleksibilnih ograničenja na tipove u parametrizovanim tipovima.
?(Unbounded Wildcard): Bilo koji tip.? extends T(Bounded Wildcard - Gornja granica): Tip mora bitiTili njegov podtip.? super T(Bounded Wildcard - Donja granica): Tip mora bitiTili njegov supertip.
// Metod koji prihvata listu bilo kog tipa public static void processList(List<?> list) { // ... } // Metod koji prihvata listu brojeva ili njihovih podtipova public static void processNumbers(List<? extends Number> list) { // ... } // Metod koji prihvata listu stringova ili njihovih supertipova public static void addStrings(List<? super String> list) { list.add("nova linija"); } -
Korišćenje u Collections Framework-u: Sve glavne klase kolekcija (List, Set, Map i dr.) su parametrizovane, što čini rad sa kolekcijama tipobezbednim i jednostavnim.
Generici su ključni element savremene Jave, povećavaju pouzdanost i čitljivost koda.