Ինչ հնարավորություններ են ներկայացնում Java-ի Generics-ը:
sobes.tech AI
Պատասխան AI-ից
Generics-ները Java- ում բարձրացնում են կոդի տեսակային անվտանգությունը, կանխելով գործարկման ժամանակ սխալները, որոնք կապված են տեսակների փոխարկման հետ: Հիմնական հնարավորությունները՝
-
Տեսակների ստուգում կոմպիլյացիայի ժամանակ: Կոմպիլյատորը ստուգում է, արդյոք ճիշտ է օգտագործվում Generics-ով նշված տեսակները, ինչը թույլ է տալիս հայտնաբերել սխալները ծրագրի գործարկումից առաջ:
// Generics-ով չլինելու դեպքում՝ հնարավոր ClassCastException List list = new ArrayList(); list.add("տող"); list.add(123); // Integer ավելացում String s = (String) list.get(1); // Գործարկման ժամանակ սխալ // Generics-ով՝ սխալը կբացահայտվի կոմպիլյացիայի ժամանակ List<String> stringList = new ArrayList<>(); stringList.add("տող"); // stringList.add(123); // Կոմպիլյացիայի սխալ String str = stringList.get(0); // Անվտանգ ստացում -
Տեսակների փոխարկում (type casting) վերացվում է: Generics-ները վերացնում են անհրաժեշտությունը բացահայտ փոխարկումների՝ հավաքածուներից տարրեր ստանալիս կամ պարամետրացված դասեր օգտագործելիս:
// Չլինելով Generics List list = new ArrayList(); list.add("Բարև"); String s = (String) list.get(0); // Բացահայտ փոխարկում // Generics-ներով List<String> stringList = new ArrayList<>(); stringList.add("Բարև"); String str = stringList.get(0); // Փոխարկում անհրաժեշտ չէ -
Ընդհանուր կոդ (Generics Methods, Generics Classes, Generics Interfaces): Позволяют создавать ընդհանուր ալգորիթմներ և տվյալների կառուցվածքներ, որոնք աշխատում են տարբեր տեսակների հետ՝ առանց կոդի կրկնության:
// Ընդհանուր մեթոդ՝ զանգվածի տպման համար public static <T> void printArray(T[] array) { for (T element : array) { System.out.print(element + " "); } System.out.println(); } // Ընդհանուր դաս՝ արժեքների զույգ 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-ների աջակցություն: Позволяют задавать гибкие ограничения на типы в параметризованных типах:
?(Unbounded Wildcard): ցանկացած տեսակ? extends T(Bounded Wildcard - վերին սահմանափակում): Տեսակը պետք է լինիTկամ նրա ենթատեսակ? super T(Bounded Wildcard - ստորին սահմանափակում): Տեսակը պետք է լինիTկամ նրա վերին տիպ
// մեթոդ, որը ընդունում է ցանկացած տեսակի ցանկ public static void processList(List<?> list) { // ... } // մեթոդ, որը ընդունում է թվերի ցանկ կամ նրանց ենթատեսակները public static void processNumbers(List<? extends Number> list) { // ... } // մեթոդ, որը ընդունում է տողերի ցանկ կամ նրանց վերին տիպերը public static void addStrings(List<? super String> list) { list.add("նոր տող"); } -
Օգտագործում Collections Framework-ում: Բոլոր հիմնական հավաքածուի դասերը (List, Set, Map և այլն) պարամետրային են, ինչը դարձնում է հավաքածուների աշխատանքը տեսակային անվտանգ և հարմար:
Generics-ները կարևոր տարր են ժամանակակից Java-ի համար, բարձրացնում են կոդի հուսալիությունը և ընթերցանությունը։