Java-ში Generics რა შესაძლებლობებს იძლევა?
sobes.tech AI
პასუხი AI-სგან
Java-да Generics кодтун түр коопсуздугун жогорулатат, ишке ашыруу учурунда пайда боло турган каталардын алдын алат. негизги мүмкүнчүлүктөр:
-
Түрлөрдү текшерүү компиляция учурунда: Компилятор Genericsте көрсөтүлгөн түрлөрдүн туура колдонулушун текшерет, бул программаны ишке киргизүүдөн мурун каталарды аныктоого мүмкүндүк берет.
// Generics жок - ClassCastException мүмкүн List list = new ArrayList(); list.add("жол"); list.add(123); // Integer кошуу String s = (String) list.get(1); // Ишке ашуучу каталар // Generics менен - компиляция учурунда каталар List<String> stringList = new ArrayList<>(); stringList.add("жол"); // stringList.add(123); // Компиляция катасы String str = stringList.get(0); // Коопсуз алуу -
Түрлөрдү түргө айландырууну (type casting) жокко чыгарыш: Generics коллекциялардан элементтерди алуу же параметрленген класстарды колдонууда түргө айландырууну талап кылбайт.
// Generics жок List list = new ArrayList(); list.add("Салам"); String s = (String) list.get(0); // Түргө айландыруу // Generics менен List<String> stringList = new ArrayList<>(); stringList.add("Салам"); String str = stringList.get(0); // Айландыруу талап кылынбайт -
Жалпы код (Generics Methods, Generics Classes, Generics Interfaces): Ар кандай түрлөр менен иштей турган жалпы алгоритмдер жана структураларды түзүүгө мүмкүндүк берет, кодду кайталоодон сактайт.
// Жалпы массивди чыгарып берүү методу public static <T> void printArray(T[] array) { for (T element : array) { System.out.print(element + " "); } System.out.println(); } // Жалпы класс - маанилердин жупу class Pair<K, V> { private K key; private V value; public Pair(K key, V value) { this.key = key; this.value = value; } public K getKey() { return key; } public V getValue() { return value; } } -
Wildcards колдоосу: Түрлөрдүн ийкемдүү чектөөлөрүн аныктоого мүмкүндүк берет.
?(Unbounded Wildcard): Ар кандай түр.? extends T(Bounded Wildcard - Гору чектөө): ТүрTже анын подтиптери болушу керек.? super T(Bounded Wildcard - Төмөнкү чектөө): ТүрTже анын супертиптери болушу керек.
// Ар кандай түрдөгү тизмени кабыл алган метод public static void processList(List<?> list) { // ... } // Сан түрлөрүнүн же алардын подтиптеринин тизмесин кабыл алган метод public static void processNumbers(List<? extends Number> list) { // ... } // Стрингдердин же алардын супертиптеринин тизмесин кабыл алган метод public static void addStrings(List<? super String> list) { list.add("жаңы жол"); } -
Collections Frameworkде колдонуу: Бардык негизги коллекциялар (List, Set, Map жана башка) параметрленген, бул коллекциялар менен иштөө түр коопсуз жана ыңгайлуу болот.
Generics — modern Javaнын негизги элементтери, алардын жардамы менен коддун ишенимдүүлүгү жана окумдуулугу жогорулайт.