Sobes.tech
Middle+

PECS принциби эмне жана ал Javaда кантип колдонулат?

sobes.tech AI

AIден жооп

PECS принциби (Producer Extends Consumer Super) — бул Java гениериктериндеги wildcard-типтер менен иштөөдө extends жана super ачкыч сөздөрүн качан колдонуу керектигин аныктоочу мнемоникалык эреже:

  • Producer (Өндүрүүчү): Эгер сиз гениерик параметрин маалыматтарды алуу үчүн колдонуп жатсаңыз (элементтерди коллекциядан чыгарып жатсаңыз), extends менен wildcard колдонушуңуз керек. Коллекция маалыматтын өндүрүүчүсү катары кызмат кылат. ? extends T типи "T же анын подкласстары" дегенди билдирет. Элементтерди коопсуз окулушу мүмкүн, бирок мындай коллекцияга элементтерди кошуу (nullдан тышкары) мүмкүн эмес.

  • Consumer (Тамактануучу): Эгер сиз гениерик параметрин маалыматтарды кошуу үчүн колдонуп жатсаңыз (элементтерди коллекцияга салуу), super менен wildcard колдонушуңуз керек. Коллекция маалыматтын тамактануучу катары кызмат кылат. ? super T типи "T же анын суперкласстары" дегенди билдирет. Тартиптүү кошуу мүмкүн, бирок окулганда объект катары алынады.

Javaда колдонуу:

Wildcard-типтер (?) менен колдонулат, APIнин ийкемдүүлүгүн жогорулатуу үчүн, коллекциялар менен иштегенде же башка гениерик типтер менен иштегенде, кеңири типтер менен иштөөгө мүмкүндүк берет, типтин коопсуздугун сактап калуу менен.

Мисалдар:

// Өндүрүүчү мисал
// printAll методу Listтен окулат
public void printAll(List<? extends Number> list) {
    // Элементтерди Number катары окутуу мүмкүн (же Object)
    for (Number num : list) {
        System.out.println(num);
    }
    // Элементтерди кошуу мүмкүн эмес (nullдан тышкары)
    // list.add(123); // Компиляция ката
}

// Тамактануучу мисал
// addNumbers методу Listке кошот
public void addNumbers(List<? super Integer> list) {
    // Integer же анын подкласстары кошулушу мүмкүн
    list.add(1);
    list.add(new Integer(2));
    // list.add(new Double(3.0)); // Компиляция ката

    // Окулганда Object болот
    Object o = list.get(0);
}