Milliseid võimalusi pakuvad Generics Java's?
sobes.tech AI
Vastus AI-lt
Generics Java-s suurendavad koodi tüübi turvalisust, vältides täitmisaegseid vigu, mis on seotud tüüpide ümberkujundamisega. Peamised võimalused:
-
Tüüpide kontroll kompilatsiooni ajal: Kompilaator kontrollib, kas Generics-iga määratud tüübid on õigesti kasutatud, mis võimaldab tuvastada vigu enne programmi käivitamist.
// Ilma Generics-ita - võimalik ClassCastException List list = new ArrayList(); list.add("rida"); list.add(123); // Lisab Integer String s = (String) list.get(1); // Käivitusviga // Generics-iga - kompileerimisviga List<String> stringList = new ArrayList<>(); stringList.add("rida"); // stringList.add(123); // Kompileerimisviga String str = stringList.get(0); // Turvaline saamine -
Tüüpide ümberkujundamise (type casting) vältimine: Generics väldivad vajadust teha otseseid tüübimuudatusi, kui saadakse elemente kogumitest või kasutatakse parametriseeritud klasse.
// Ilma Generics-ita List list = new ArrayList(); list.add("Tere"); String s = (String) list.get(0); // Otsene tüübimuudatus // Generics-iga List<String> stringList = new ArrayList<>(); stringList.add("Tere"); String str = stringList.get(0); // Muudatus ei ole vajalik -
Üldise koodi realiseerimine (Generics Methods, Generics Classes, Generics Interfaces): Annab võimaluse luua üldisi algoritme ja andmestruktuure, mis töötavad erinevat tüüpi, vältides koodi dubleerimist.
// Üldine meetod massiivi printimiseks public static <T> void printArray(T[] array) { for (T element : array) { System.out.print(element + " "); } System.out.println(); } // Üldine klass - väärtuste paar 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 toetus: Annab võimaluse määratleda paindlikke piiranguid tüüpidele parametriseeritud tüüpidel.
?(Piiramatu Wildcard): Iga tüüp.? extends T(Piiratud Wildcard - Ülemine piir): Tüüp peab olemaTvõi selle alamklass.? super T(Piiratud Wildcard - Alumine piir): Tüüp peab olemaTvõi selle superklass.
// Meetod, mis võtab vastu mis tahes tüüpi nimekirja public static void processList(List<?> list) { // ... } // Meetod, mis võtab vastu arvude või nende alamklasside nimekirja public static void processNumbers(List<? extends Number> list) { // ... } // Meetod, mis võtab vastu stringide või nende superklasside nimekirja public static void addStrings(List<? super String> list) { list.add("uus rida"); } -
Kogumike raamistikus kasutamine: Kõik peamised kogumike klassid (List, Set, Map jms) on parametriseeritud, mis muudab kogumike kasutamise tüübiturvaliseks ja mugavaks.
Generics on kaasaegse Java võtmeelement, mis tõstab koodi usaldusväärsust ja loetavust.