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:
-
?(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 } -
?(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 } -
?(Sərhədsiz joker): Hər hansı bir tipi göstərir.? extends Objectilə 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.