Sobes.tech
Middle

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нын негизги элементтери, алардын жардамы менен коддун ишенимдүүлүгү жана окумдуулугу жогорулайт.