Java 1.5 Genel Tipler (generics)

Java 1.5'in getirdiği yeniliklerden biri genel tip (generic) özelliğidir. Bu yapıları C++'taki template'lere benzetebiliriz. Eğer template'ler hakkında bilginiz varsa genel tipleri anlamanız kolaylaşacaktır. (C#'ta da genel tipler desteklenmektedir)

Genel tipler, tiplerin soyutlanması amacıyla kullanılmaktadır. En çok karşılaşılan örnek saklama (container) tipleridir. Bu saklama tiplerine Java'daki Collection hiyerarşisindeki tipleri örnek olarak verebiliriz (Vector, ArrayList, vb.). Aşağıda bu tip bir yapının örnek kullanımını görebilirsiniz:

List intListem = new LinkedList(); //1Bagli liste tanimliyoruz
intListem.add(new Integer(0)); //2 Listeye bir eleman ekliyoruz
Integer x = (Integer) intListem.iterator().next(); //3 Listeden eleman cekiyoruz

Dikkat ederseniz 3. satırda bir "cast" (tip dönüştürme) işlemi yapmak zorunda kaldık. Programcı bir listede sakladığı tipi bilmektedir, ancak List yapısı Object tipinde nesneler döndürdüğü için, tip dönüştürme işlemi yapmak zorunda kalmaktadır. Tip dönüşümleri kodu karıştırdıkları gibi, çalışma zamanı hatasına da neden olabilir.

Peki programcının kodu yazarken listede kullanmak istediği tipi önceden belirleyebildiğini ve listeyi sadece bu tip özgü ayarladığını düşünelim. İşte bu düşünce genel tiplerin arkasında yatan temel fikirdir. Yukarıdaki kod parçasını bu fikre dayanarak genel tiplerle yazılmış hali aşağıdadır:

List<Integer> intListem = new LinkedList<Integer>();// 1' Integer bagli liste
intListem.add(new Integer(0));// 2' Listeye bir eleman ekliyoruz
Integer x = intListem.iterator().next();// 3' Listeden eleman cekiyoruz

Bağlı listemizin tanımını incelediğiniz zaman, bu oluşturduğumuz listenin rastgele bir liste olmadığını, Integer bağlı listesi olduğunu belirttiğimizi görebilirsiniz. Bu şekilde bu listeye sadece Integer nesnelerin eklenmesini zorlamış oluyoruz. Böyle çalışma zamanı hatalarını yoketmiş oluruz. Okunabilirliğin artmış olduğu da unutulmamalıdır.

Kaynak : Generics in the Java Programming Language

Bağlantılar:
http://java.sun.com/j2se/1.5.0/docs/guide/language/generics.html
http://www.ibm.com/developerworks/java/library/j-djc02113.html
http://www.csharpnedir.com/makalegoster.asp?MId=629

2 yorum:

Adsız dedi ki...

generics kullanimina verilen örnek öncekinin aynisi olmus.

rius dedi ki...

Generics kullanımını gösteren örneğiniz hatalı.Generics siz halinin aynısı olmuş.

List< Integer > intListem=new LinkedList< Integer >();
intListem.add(new Integer(10));
Integer x=intListem.iterator().next();

Şeklinde olabilirdi