Sobes.tech
Middle

Ի՞նչ են Generics-ը և ինչու են օգտագործվում:

sobes.tech AI

Պատասխան AI-ից

Generics-ը Java-ում թույլ է տալիս ստեղծել դասեր, ինտերֆեյսներ և մեթոդներ, որոնք աշխատում են պարամետրացված տիպերով:

Հիմնական նպատակները՝

  • Տիպային անվտանգության բարձրացում: Կոմպիլատորը ստուգում է տիպերը կոմպիլացիայի ժամանակ, կանխելով ClassCastException գործարկման ժամանակ:
  • Տիպային փոխակերպումների վերացում: Չի պահանջվում ձեռքով փոխարկել տիպերը հավաքածուներից տարրեր հանելու ժամանակ:
  • Ավելացնել ավելի ճկուն և վերօգտագործելի կոդ: Կարող եք գրել ընդհանուր ալգորիթմներ և տվյալների կառուցվածքներ, որոնք կիրառելի են տարբեր տիպերի համար:

Բերենք առանց Generics օրինակ:

// Մինչ Java 5
import java.util.ArrayList;
import java.util.List;

public class OldStyleList {
    public static void main(String[] args) {
        List list = new ArrayList(); // առանց տիպավորման
        list.add("hello");
        list.add(123); // կարող է ավելացնել ցանկացած օբյեկտ

        String s = (String) list.get(0); // անհրաժեշտ է տիպային փոխարկում
        Integer i = (Integer) list.get(1); // անհրաժեշտ է տիպային փոխարկում

        // Տիպային փոխարկման սխալ հնարավոր է
        // String error = (String) list.get(1); // ClassCastException
        System.out.println(s);
        System.out.println(i);
    }
}

Բերենք Generics-ով:

// Generics-ով
import java.util.ArrayList;
import java.util.List;

public class GenericList {
    public static void main(String[] args) {
        List<String> list = new ArrayList<>(); // տողերի ցանկ
        list.add("hello");
        // list.add(123); // կոմպիլյացիոն սխալ - չի կարելի ավելացնել Integer

        String s = list.get(0); // տիպային փոխարկում անհրաժեշտ չէ

        // Անհնար է ավելացնել այլ տիպ, կանխում է սխալը
        // List<Integer> intList = new ArrayList<>();
        // intList.add("world"); // կոմպիլյացիոն սխալ
        System.out.println(s);
    }
}

Generics-ները նաև օգտագործվում են՝

  • Դասերում: ArrayList<E>, HashMap<K, V>
  • Ինտերֆեյսներում: List<E>, Map<K, V>
  • Մեթոդներում: <T> void printArray(T[] array)
  • Տիպային սահմանափակումներում: <T extends Comparable<T>> (սահմանափակում Comparable-ին համապատասխանող տիպերի համար)

Java-ում Generics-ների իրականացման հիմքը տիպերի մաքրում (type erasure)-ն է, որը կատարվում է կոմպիլացիայի ժամանակ: Սա նշանակում է, որ գեներիկ տիպերի մասին տեղեկատվությունը հեռացվում է, և գործարկման ժամանակ JVM-ը աշխատում է մաքուր տիպերով: Սա ապահովում է հետագա համատեղելիություն հին Java տարբերակների հետ, բայց ունի որոշ սահմանափակումներ։