Sobes.tech
Middle

Java-da wildcard nədir?

sobes.tech Süni İntellekt

AI-dan cavab

Java-da ? joker simvolu, generiklərdə məlum olmayan tipi ifadə etmək üçün istifadə olunur. Bu, müxtəlif uyğun tiplərə malik kolleksiyalarla işləməyə imkan verir, müəyyən bir tiplə sıx bağlı olmadan.

Əsas istifadə ssenariləri:

  1. ? (Yuxarı sərhədli joker): Verilən sinif və ya interfeysi miras alan və ya onu həyata keçirən hər hansı bir tipi göstərir. Kolleksiyadan məlumat oxumaq üçün istifadə olunur. Nümunə: List<? extends Number> List<Integer>, List<Double> daxil edə bilər, .getList<Long>.

    // Yuxarı sərhədli kolleksiyadan oxuma
    public void processNumbers(List<? extends Number> numbers) {
        for (Number n : numbers) {
            System.out.println(n);
        }
        // numbers.add(new Integer(10)); // Kompilyasiya xətası - elementlər əlavə edilə bilməz
    }
    
  2. ? (Aşağı sərhədli joker): Verilən sinif və ya interfeysin supertipi və ya həmin sinif/interfeys özü. Kolleksiyaya yazmaq üçün istifadə olunur (PECS prinsipi: Producer Extends, Consumer Super). Nümunə: List<? super Integer> List<Integer>, List<Number>, List<Object> daxil edə bilər.

    // Aşağı sərhədli kolleksiyaya yazma
    public void addIntegers(List<? super Integer> list) {
        list.add(1);
        list.add(new Integer(2));
        // Object o = list.get(0); // Object qaytarır, çünki dəqiq tipi məlum deyil
    }
    
  3. ? (Sərhədsiz joker): Hər hansı bir tipi göstərir. ? extends Object ilə bərabərdir. Elementlərin faktiki tipi önəmli deyil, məsələn, ölçünü yoxlamaq və ya təmizləmək üçün istifadə olunur.

    // Hər hansı tipli kolleksiyadan işləmək
    public void printList(List<?> list) {
        for (Object obj : list) {
            System.out.println(obj);
        }
        // list.add("hello"); // Kompilyasiya xətası - elementlər əlavə edilə bilməz (null istisna)
    }
    

Wildcards kodun elastikliyini artırır, metodların daha geniş kolleksiya tipləri ilə işləməsinə imkan verir və tip təhlükəsizliyini qoruyur. Bu, müxtəlif, lakin uyğun kolleksiya tipləri üzərində eyni əməliyyatları həyata keçirən metodlar üçün kod təkrarlamasını qarşısını almağa kömək edir.