-- Java SE

Generics nedir,neden kullanılır?

Generic’in Türkçe karşılığının genel,jenerik olduğu söylenebilir.Adından da anlaşıldığı üzere bir tipi genelleştirme amacıyla kullanılabilir.

Generic kullanmanın faydalarından ilki kodu daha okunabilir yapmasıdır.Örneğin generic kullanmadan bir arraylist’e eleman eklemek istediğimizde type-casting yapmak zorunda kalırız.

List list = new ArrayList();
list.add("meriç");
String s = (String) list.get(0);

Aynı işlemi Generic kullanarak şu şekilde yapabiliriz.

List<String> list = new ArrayList<String>();
list.add("meriç");
String s = list.get(0);   // "casting yok"

Burada <String> bizim generic tipimizdir.Yani list’e ekleceğimiz elemanların String olduğunu gösterir.Aynı listeye int eleman eklemek istediğimizde hatayla karşılaşırız.

List<String> list = new ArrayList<String>();
list.add("meriç");
String s = list.get(0);   // "casting yok"
int i = 3;
list.add(i); // Eklenmez.

Bir diğer faydası ise aslında run-time(çalışma zamanı) sırasında karşılaşacağımız hataları compile-time(derleme zamanı) sırasında düzeltme imkanı sunar.Yukarda <String> kullanarak aslında o arraylist içindeki tüm elemanların String tipinde olduğunu söyledik,güçlü bir tip güvenliği(type safety) kurduk ve int eklemek istediğimizde henüz daha compile aşamasındayken hatayı aldık.

 

Başka bir örnek :

class Ev<T>{
    private T t;

    public T getT() {return t;}

    public void setT(T t) {this.t = t;}
}
class Araba{

    public String getRenk() {return renk;}

    public void setRenk(String renk) {this.renk = renk;}

    private String renk;
}

public class Main {

    public static void main(String[] args) {

        Ev ev1 = new Ev();
        ArrayList list = new ArrayList();
        list.add("Ahmet");
        list.add("Mehmet");
        ev1.setT(list);
        System.out.println(ev1.getT());

        Ev ev2 = new Ev();
        Araba araba = new Araba();
        araba.setRenk("Mavi");
        ev2.setT(araba.getRenk());
        System.out.println(ev2.getT());
        
        Ev ev3 = new Ev();
        int a = 2;
        ev3.setT(a);
        System.out.print(ev3.getT());



    }
}

Burada Ev sınıfı generic tiptedir ve T parametresi almıştır.Bu T; oluşturulan T tipinde bir nesnenin herhangi bir tipte olabileceğini gösterir.Örneğin ev1 nesnesi için t değişkeni bir arraylistir, ev2 nesnesi için t değişkeni bir stringtir,ev3 nesnesi için t değişkeni bir int’tir ve kod çıktısı şu şekilde olur :

[Ahmet, Mehmet]
Mavi
2

 

 

Yorum bırak

Yorum