Welcome to My Blog 👋

Java, Spring Framework, Microservices, Docker, Kubernetes, AWS and Others 🚀
Follow Me

Java - Generic Tipler



  December 30, 2018    Labels:,,,,,,, 

Java diline generic tipler kod tekrarını azaltmak için eklenmiştir. Generic tipler ile yazdığımız class'ların, metotların veya interface'lerin veri tiplerini çalışma anında belirtebiliriz. Örneğin bir metot yazdınız ve bu metot bir değişken alıyor. Bu değişkenin her veri tipinde olabilmesini isterseniz generic tipleri kullanabilirsiniz. Bu işlem generic tiplerden önce object sınıfı ile yapılabiliyordu ancak tip denetimi ve tip dönüşümü gibi ekstra işlemler gerektirdiği için generic tipler ile yapılması çok daha mantıklıdır.
Generic tiplerin, kod sadeliği sağlaması, kodu hızlı geliştirmemize olanak vermesi ve tip güvenliği gibi bir çok avantajı vardır.

Generic tipler class'lar ile kullanıldığında aşağıdaki şekilde kullanılabilir. Genel tanımlaması class ClassAdi<T,K,L,...> şeklinde olabilir. T,K,L gibi istediğimiz kadar farklı tip belirtebiliriz hepsi nesne oluştururken belirtiğimiz tipi temsil eder.

class GenericTipler<T> {
    
    T obj;
    
    public GenericTipler(T obj) {
        
        this.obj = obj;
    }

    public T getObj() {
        return obj;
    }

}

public class Example {

    public static void main(String[] args) {

        GenericTipler exampleString = new GenericTipler("Berkay");
        GenericTipler exampleInteger = new GenericTipler(5);
        
        System.out.println(exampleString.getObj().getClass().getName());
        System.out.println(exampleInteger.getObj().getClass().getName());

    }
}

Generic tipler metotlar ile kullanılabilir. Genel tanımlama ön_ekler <T,K> dönüş_tipi metot_adi(T obj, K obj2, K obj3, ...) gibi olur.


public class Example {

    public static void main(String[] args) {

        goster("berkay");
    }

    public static <T> void goster(T obj) {
        
        System.out.println(obj.getClass().getName());
    }
}

Generic tipler interface ve kalıtım ile de kullanılabilir. Bu kullanım class'lardaki kullanım ile aynıdır.

1 comment: