Java-ში რა არის wildcard?
sobes.tech AI
პასუხი AI-სგან
Javaда ? деген жупон (wildcard) жалпы түрдө белгилүү эмес түрдү көрсөтүү үчүн колдонулат. Ал коллекциялар менен иштөөдө, ар кандай шайкеш келген түрлөрдү камтыган элементтер менен иштөөдө, так түргө катуу байланбай туруп, колдонууга мүмкүндүк берет.
Негизги колдонуу сценарийлери:
-
?(Жогорку чектелген жупон): Көрсөтөт кез келген түр, ал мураскор же көрсөтүлгөн класс/интерфейсти ишке ашырат. Колдонулат коллекциядан маалымат окуу үчүн: Мисал:List<? extends Number>List<Integer>,List<Double>,.getList<Long>камтышы мүмкүн.// Жогорку чектөө менен коллекциядан окуу public void processNumbers(List<? extends Number> numbers) { for (Number n : numbers) { System.out.println(n); } // numbers.add(new Integer(10)); // Катуу ката - элементтерди кошууга болбойт } -
?(Төмөнкү чектелген жупон): Көрсөтөт кез келген түр, ал көрсөтүлгөн класс/интерфейстин мураскорлугуна ээ же өзү ошол класс/интерфейс. Колдонулат коллекцияга жазуу үчүн (PECS принциби: Producer Extends, Consumer Super): Мисал:List<? super Integer>List<Integer>,List<Number>,List<Object>камтышы мүмкүн.// Коллекцияга жазуу төмөнкү чектөө менен public void addIntegers(List<? super Integer> list) { list.add(1); list.add(new Integer(2)); // Object o = list.get(0); // Object кайтарат, так түрү белгисиз } -
?(Чексиз жупон): Кез келген түрдү көрсөтөт.? extends Objectменен барабар. Колдонулат, эгер коллекция элементтеринин так түрү маанилүү эмес болсо, мисалы, өлчөмүн текшерүү же тазалоо үчүн:// Ар кандай түрдөгү коллекция менен иштөө public void printList(List<?> list) { for (Object obj : list) { System.out.println(obj); } // list.add("hello"); // Катуу ката - элементтерди кошууга болбойт (өткөөл null) }
Звездные знаки кодуңуздун ийкемдүүлүгүн арттырат, методдорго кеңири түрдөгү коллекциялар менен иштөө мүмкүнчүлүгүн берип, ошол эле учурда түр коопсуздугун сактайт. Алардын жардамы менен ар кандай, бирок шайкеш келген түрдөгү коллекциялар үчүн кодду кайталоодон качууга болот.