Generic Classes – Jenerik Sınıflar

Jenerik Sınıflar neden kullanılır ?

Veritipinin tam belirlenemediği durumlarda ve veri tiplerini tek bir çatı altında toplayarak,kodun tekrar tekrar yazılmasını önleyen mekanizmalardır

Java tip ihlallerine çok dikkat eden bir dildir. Derleme zamanındaki hataları bulmak  çalışma zamanındaki hataları bulmaktan daha kolaydır. Bu sebeple jenerik kodlar derleme zamanında işleme alınır ve çalışma zamanında bulunmadıklarından hata yakalaması çok daha kolaydır.

buna bir örnek

Yukarıdaki kod blogu derlendiğinde sorunsuz derlenecektir ancak çalışma zamanında yani çalıştır butonuna bastığınızda  bu kodda şöyle bir hata alacaksınız

Neden çünkü integer bir değeri cast etmeden eklemeye çalışıyoruz veri güvenliğini ihlal eden bir durum oluşuyor. Bu kod bizim main sınıfımızda direk çalışacaksa zaten hatayı hemen alırız ancak programın belli bir zamanında devreye giren bir kodsa eğer ? işte o zaman o devreye girdiği anda hataya düşecek ve programımız çalışmayacaktır. İşte yukarıda belirttiğim gibi “Generic” ler derleme zamanında işleme alınır hata varsa derleme zamanında hatalar belirtilir   program çalışmaya başladığınızda sürprizlerle karşılaşmanıza engel olurlar.

Peki bu kodu Generic kullanarak tekrardan yazalım

bu şekilde derleme zamanında gerekli uyarılar yapılacak ve çalışma zamanında sürpriz ile karşılaşmayacağız

Netice olarak:  Bu kodla birlikte hangi türde bir liste oluşturacağımızı belirtmiş olduk. Eğer farklı bir tipte veriyi listeye eklemeye çalışınca program bize derleme hatası verecek ( program çalışmayacak yani ) . Bu durumun diğer bir sonucu olarak da ” Cast” işlemi yapmak zorunda kalmayacağız ve çalışma zamanında  ClassCastException hatasıda almayacağız

Generic class 

Genel bir tip tanımlaması yapılarak sınıflar oluşturabilirsiniz. class yada interfaceleri farklı tipler ile kullanabilirsiniz. ” < >”  küçük ,büyük işaretilerinin arasına tip tanımlaması yapılabilir. Şimdi bu konuya açıklık getirmek için bir örnek yapalım.

Şimdi bu örnekte biz bir tip dönüşümü yapıyoruz ve sorun  yok.  Eğer biz numerik bir ifade eklesek ve doğru bir cast işlemi yapmazsak  “ClassCastException” hatası alacağız. Ancak bu duruma şöyle bir çözüm bulalım

Netice olarak: GenericsType sınıfını main metodda kullandık. Tip “cast” işlemi yapmadık ve çalışma zamanında “ClassCastException” hatasını engellemiş olduk.  Kod yazma esnasında yanlış tiplerin eklenmesine izin vermemiş olduk.  GenericsType<T> ile bir tip referans olarak verdik ve sorunlara baştan çözüm bulduk. Eğer böyle bir önlem almasaydık Object türünden nesneler eklemek zorunda kalacaktık. Object türünde nesneler ise ” String ,Integer, ….. ” hepsi olabilir ve doğru cast işlemleri yapmak zorundayız. Eğer yapamazsak programın çalışma zamanında hata verecek.

Bir başka bakış açısı olarak Generic sınıflar Farklı veri tiplerini kullanan aynı algoritmaları tek çatı altında toplayarak tekrar tekrar yazılmalarını engeller.  Mesela bir metodunuzun olduğunu düşünün aynı metod hem String hem Integer  hem… diğer veri tiplerini alıyor her biri için aynı metodu farklı veri tipi kullanarak yazmaktansa hepsi için tek bir jenerik metod yazarsınız iş biter. 🙂 daha bir çok güzellik jenerik sınıflar ve metodlarla birlikte programcıların hizmetin sunulmuştur.

Aslında daha yazacaktım ama şimdilik bu kadar yeter diyorum. Aklına soru gelen arkadaşlar bana yorum satırından soru yazabilirler .

 

Bir cevap yazın

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