Kādas iespējas sniedz Generics Java?
sobes.tech AI
Atbilde no AI
Generics Java valodā uzlabo koda tipu drošību, novēršot izpildlaika kļūdas, kas saistītas ar tipu pārveidošanu. Galvenās iespējas:
-
Tipu pārbaude kompilācijas laikā: Kompilators pārbauda, vai ir pareizi izmantoti Generics norādītie tipi, kas ļauj identificēt kļūdas pirms programmas palaišanas.
// Bez Generics - iespējama ClassCastException List list = new ArrayList(); list.add("rinda"); list.add(123); // Pievieno Integer String s = (String) list.get(1); // Izpildlaika kļūda // Ar Generics - kompilēšanas kļūda List<String> stringList = new ArrayList<>(); stringList.add("rinda"); // stringList.add(123); // Kompilēšanas kļūda String str = stringList.get(0); // Droša saņemšana -
Tipu pārveidojumu novēršana (type casting): Generics novērš nepieciešamību pēc tieša tipu pārveidojuma, iegūstot elementus no kolekcijām vai izmantojot parametrizētus klases.
// Bez Generics List list = new ArrayList(); list.add("Sveiki"); String s = (String) list.get(0); // Tiešais pārveidojums // Ar Generics List<String> stringList = new ArrayList<>(); stringList.add("Sveiki"); String str = stringList.get(0); // Pārveidojums nav nepieciešams -
Vispārīga koda realizācija (Generics Methods, Generics Classes, Generics Interfaces): Ļauj izveidot vispārīgas algoritmus un datu struktūras, kas strādā ar dažādiem tipiem, ne dublējot kodu.
// Vispārīgs metode masīva drukāšanai public static <T> void printArray(T[] array) { for (T element : array) { System.out.print(element + " "); } System.out.println(); } // Vispārīgs klases - pāris vērtību 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 atbalsts: Ļauj definēt elastīgas ierobežojumus tipiem parametrizētajos tipos.
?(Neierobežots Wildcard): jebkurš tips.? extends T(Augšējās robežas Wildcard): tips irTvai tā apakštips.? super T(Zemākās robežas Wildcard): tips irTvai tā supertips.
// Metode, kas pieņem jebkura tipa sarakstu public static void processList(List<?> list) { // ... } // Metode, kas pieņem skaitļu sarakstu vai to apakštipus public static void processNumbers(List<? extends Number> list) { // ... } // Metode, kas pieņem virknes sarakstu vai to supertipus public static void addStrings(List<? super String> list) { list.add("jauna rinda"); } -
Izmantošana kolekciju ietvarā: Visas galvenās kolekciju klases (List, Set, Map u.c.) ir parametrizētas, kas padara darbu ar kolekcijām tipa drošu un ērtu.
Generics ir mūsdienu Java būtisks elements, kas uzlabo koda uzticamību un lasāmību.