Middle
Kas ir Generics un kā tie tiek izmantoti?
sobes.tech AI
Atbilde no AI
Generics Java ļauj izveidot klases, interfeisus un metodes, kas darbojas ar parametrizētiem tipiem.
Galvenais Generics mērķis:
- Palielināt tipa drošību: Kompilators pārbauda tipus kompilācijas laikā, novēršot
ClassCastExceptionizpildes laikā. - Noņemt tipu pārvēršanu: Nav nepieciešams manuāli pārvērst tipus, izņemot elementus no kolekcijām.
- Radīt elastīgāku un atkārtoti izmantojamu kodu: Var rakstīt vispārīgus algoritmus un datu struktūras, kas piemērojamas dažādiem datu tipiem.
Piemērs bez Generics:
// Pirms Java 5
import java.util.ArrayList;
import java.util.List;
public class OldStyleList {
public static void main(String[] args) {
List list = new ArrayList(); // bez tipa definīcijas
list.add("hello");
list.add(123); // var pievienot jebkuru objektu
String s = (String) list.get(0); // nepieciešama tipu pārvēršana
Integer i = (Integer) list.get(1); // nepieciešama tipu pārvēršana
// Iespējama tipu pārvēršanas kļūda
// String error = (String) list.get(1); // ClassCastException
System.out.println(s);
System.out.println(i);
}
}
Ar Generics:
// Ar Generics
import java.util.ArrayList;
import java.util.List;
public class GenericList {
public static void main(String[] args) {
List<String> list = new ArrayList<>(); // virkņu saraksts
list.add("hello");
// list.add(123); // kompilācijas kļūda - nevar pievienot Integer
String s = list.get(0); // nav nepieciešama tipu pārvēršana
// Nav iespējams pievienot citu tipu, tas novērš kļūdu
// List<Integer> intList = new ArrayList<>();
// intList.add("world"); // kompilācijas kļūda
System.out.println(s);
}
}
Generics tiek izmantoti arī:
- Klasēs:
ArrayList<E>,HashMap<K, V> - Interfeisos:
List<E>,Map<K, V> - Metodēs:
<T> void printArray(T[] array) - Tipu ierobežojumos:
<T extends Comparable<T>>(ierobežojums tipiem, kas īstenoComparable)
Java realizācija Generics balstās uz "tipu iznīcināšanu" (type erasure) kompilācijas laikā. Tas nozīmē, ka informācija par ģenerētajiem tipiem tiek dzēsta, un izpildes laikā JVM darbojas ar neapzīmētiem tipiem. Tas nodrošina atpakaļ saderību ar vecākām Java versijām, bet ir dažas ierobežojumi.