Middle
Generics'te hangi imkanlar var?
sobes.tech yapay zeka
AI'dan gelen yanıt
Generikler, parametreli sınıflar, arayüzler ve metodlar oluşturmayı sağlar.
Ana özellikler:
- Kod tekrarını önleme: Herhangi bir türle çalışan evrensel veri yapıları ve algoritmalar oluşturma.
- Derleme zamanında tip güvenliği: Tip hataları derleme aşamasında tespit edilir, çalışma zamanında değil. Manuel tip dönüşümlerine ve olası
ClassCastExceptionhatalarına gerek kalmaz. - Daha iyi okunabilirlik: Kod, hangi türlerle çalıştığını açıkça gösterdiği için daha anlaşılır hale gelir.
Örnekler:
List<T>kapsayıcı sınıfı, herhangi bir türTöğesini depolayabilir.static <T> T getFirst(List<T> list)metodu, herhangi bir türdeki listenin ilk öğesini dönebilir.
Generics kısıtlamaları:
- Parametreli türlerin örnekleri oluşturulamaz:
new T(). - İlkel türler parametre olarak kullanılamaz (örneğin,
List<int>- yanlış,List<Integer>kullanılmalı). - Generik türlerde diziler doğrudan oluşturulamaz (örneğin,
T[] array = new T[10]- yanlış,ArrayListkullanılmalı veya tip dönüşümü yapılmalı). - Statik alanlar doğrudan kullanılamaz.
- Tip bilgisi çalışma zamanında silinir (Type Erasure), sınırlandırılmış wildcards hariç.
Wildcards ve sınırlandırılmış Tip Parametreleri:
<?>: Bilinmeyen tür. Öğeleri okumaya izin verir, yazmaya izin vermez.<? extends T>: Üst sınır.T'nin alt türleriyle çalışmaya izin verir.Tveya onun üst türlerindeki öğeleri okuyabilir, yazamaz (null hariç).<? super T>: Alt sınır.Tveya onun alt türleriyle çalışmaya izin verir.Tveya onun alt türlerindeki öğeleri yazabilir, okuma sırasında sadeceObjectalınır.
Örnek:
// Number alt türlerini içeren herhangi bir listenin öğelerini yazdırabilen metod
public static void printNumbers(List<? extends Number> list) {
for (Number n : list) {
System.out.println(n);
}
// list.add(new Integer(1)); // Derleme hatası
}
// Integer ekleyebilen metod
public static void addIntegers(List<? super Integer> list) {
list.add(new Integer(10));
// Integer val = list.get(0); // Derleme hatası, Object döner
}