Javaда генератик колдонууда extends жана super ачкыч сөздөрүнүн айырмасы эмнеде?
sobes.tech AI
AIден жооп
Javaда, генерарик менен иштөөдө, extends жана super ачкыч сөздөрү түрлөрдү чектөө үчүн колдонулат жана коварианттык жана контраварианттыкка таасир этет.
-
? extends T— жогорку чектөө (коварианттык). T түрү же анын кез келген подклассын колдонууга мүмкүндүк берет. Бул коллекциядан T түрүндөгү объекттерди окууга мүмкүндүк берет, бирок мындай коллекцияга объекттерди коопсуз кошуу мүмкүн эмес (эркекnullисключением). -
? super T— төмөнкү чектөө (контраварианттык). T түрү же анын кез келген үстүңкү классын колдонууга мүмкүндүк берет. Бул T түрүндөгү объекттерди коллекцияга кошууга мүмкүндүк берет, бирок окууда гана Object же кеңири түрлөрдү алууга болот.
Мисал:
List<? extends Number> listExtends = new ArrayList<Integer>();
Number num = listExtends.get(0); // Number катары окуй аласыз
// listExtends.add(10); // Компиляция ката
List<? super Integer> listSuper = new ArrayList<Number>();
listSuper.add(10); // Integer кошуу мүмкүн
Object obj = listSuper.get(0); // Окууда, тип Object
Ошентип, extends структурадан маалымат окуу үчүн колдонулат, ал эми super — маалымат жазуу үчүн колдонулат.