Generics Nedir? Neden Kullanılır?

Java’da her class Object sınıfının alt classıdır. Dolayısıyla yaratılan her nesne Object tipinde nesnelerdir. Bundan dolayı veri ambarlarına(warehouse) her tipten nesne yerleştirilebilir.

Veri ambarlarına eklenen veri derleme hatası vermez. Çünkü derleyici ambardaki veri tipini tespit edemez. Ancak Run-Time esnasında
derleyici, verilerin aynı tipte olmadığını tespit eder ve hata verir. Bundan dolayı veri tiplerini kontrol edecek bir mekanizma gerekmektedir.

Bu sorunu çözmek içinde JAVA 5.0 sürümü ile “Generics” kavramını bizlerle tanıştırdı.

Generics ile ilgili Örnek

Aşağıdaki Generic olmadan dönüştürme (casting) ihtiyacına bir örnek verilmiştir. Burada ArrayList içindeki farklı türden nesnelere erişip, bu nesnelerin, ait oldukları sınıflara özgü metotlarını kullanmak istediğimizde derleme zamanı hatası (compile time error) verecektir.

Çünkü bu nesneler Object sınıfına ait nesne olarak değerlendirilmektedir. ve bu super classta Konut sınıfına özgü fiyatHesapla() veya String sınıfına özgü length() metotları yoktur.

Ancak açık dönüşüm(casting) ile bu nesnelerin parantez içinde belirttiğimiz sınıfa(arayüze) ait olduğunun garantisini derleyiciye verirsek bu metotları çağırabiliriz.

Eğer eriştiğimiz nesneler, açık dönüşüm(casting) ile belirttiğimiz sınıflara ait değilse, derlemeyi geçsek de çalışma zamanında Run-Time Error ile karşılaşırız.

Generics yapısını kullanalım

Generic yapısında <> arasında parametre olarak saklanacak veri tipi belirtilir. ÖRN: <E>

Yukarıdaki örnekte bu kez iki farklı ArrayList tanımlanıyor. Görüldüğü gibi ArrayList’in istediğimiz elemanına üzerinden <> arasında belirtilen sınıfa(arayüze) ait bir referans gönderilebilir. Ayrıca kendi sınıfına özgü metodunu çağırabiliriz.

Özetle Generics, içerisinde tüm referans veri tiplerini tutan ayrıca hangi referans tipini tutacağına oluştururken karar verebileceğimiz ve üzerinde aynı işlemleri yapmamızı sağlayan bir yapıdır. Bu yapı nesneye yönelik programlama dillerinin hepsinde mevcuttur.

ArrayList ile ilgili konu anlatımı ve örnekler için tıklayın.

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir