Middle
Generics деген эмне жана алар эмне үчүн колдонулат?
sobes.tech AI
AIден жооп
Javaда Generics класстарды, интерфейстерди жана методдорду параметрлүү типтер менен иштөө үчүн түзүүгө мүмкүндүк берет.
Genericsтин негизги максаты:
- Типтик коопсуздукту жогорулатуу: Компилятор типтерди компиляция учурунда текшерет,
ClassCastExceptionкалыптануусун алдын алат. - Типтерди түрлөргө бөлүүнү жокко чыгарыш: Коллекциялардан элементтерди алуу учурунда типтерди кол менен түрлөргө бөлүүнүн кереги жок.
- Кодду көбүрөөк ийкемдүү жана кайра колдонууга ылайыктуу кылуу: Жалпы алгоритмдер жана маалымат структураларын жазууга болот, алар ар кандай маалымат түрлөрү үчүн колдонулушу мүмкүн.
Generics жок мисал:
// Java 5ке чейин
import java.util.ArrayList;
import java.util.List;
public class OldStyleList {
public static void main(String[] args) {
List list = new ArrayList(); // типизация жок
list.add("hello");
list.add(123); // ар кандай обьект кошсо болот
String s = (String) list.get(0); // типти түрлөргө бөлүү керек
Integer i = (Integer) list.get(1); // типти түрлөргө бөлүү керек
// Түрлөрдү түрлөргө бөлүү ката болушу мүмкүн
// String error = (String) list.get(1); // ClassCastException
System.out.println(s);
System.out.println(i);
}
}
Generics менен мисал:
// Generics менен
import java.util.ArrayList;
import java.util.List;
public class GenericList {
public static void main(String[] args) {
List<String> list = new ArrayList<>(); // саптардын тизмеси
list.add("hello");
// list.add(123); // компиляция ката - Integer кошууга болбойт
String s = list.get(0); // типти түрлөргө бөлүү керек эмес
// Башка тип кошуу мүмкүн эмес, ката алдын алат
// List<Integer> intList = new ArrayList<>();
// intList.add("world"); // компиляция ката
System.out.println(s);
}
}
Generics дагы колдонулат:
- Класстарда:
ArrayList<E>,HashMap<K, V> - Интерфейстерде:
List<E>,Map<K, V> - Мethoддордо:
<T> void printArray(T[] array) - Типтик чектөөлөрдө:
<T extends Comparable<T>>(Comparableишке ашырган типтерге чектөө)
Javaда Generics ишке ашырылышы типтердин өчүрүлүшү (type erasure) негизинде. Бул деген, генерик типтер жөнүндө маалымат жоголот, жана ишке ашырылуу учурунда JVM таза типтер менен иштейт. Бул эски Java версияларына керектүү керектүү шайкештикти камсыздайт, бирок кээ бир чектөөлөрү бар.