Java'da Generic Class Kullanımı
Merhabalar arkadaşlar. Bu yazıda size Java’da Generic Class kullanımından bahsedeceğim.
İş hayatından geliştirilen projelerde çok sayıda farklı tabloya karşılık gelen POJO, entity sınıfları yer alır ve oturup da bu her bir entity için ayrı ayrı işler yapan metotlar yazmak ne mümkündür ne de doğru bir iştir. Java dilinde de farklı veri tipleri için aynı işi yapabilmek amacı ile *Generic Class yapısı ortaya konmuş. Şimdi Generic Class kullanımını örnekleyelim.
Elimizde Student ve Teacher adında şu şekilde iki adet POJO’muz yer alıyor:
Student.java
POJO’larımızda toString metotlarını kendime göre uyarladık.
ServiceClass isminde bir sınıf tanımlıyoruz ve bu sınıfımızda bu POJO’lar için benzer işleri yapacak metotları oluşturuyoruz. Örneğin veritabanına kayıt işlemi yapılacağı zaman bir create metodu tanımlanıp kullanılabilir. Bizim örneğimizdeki ServiceClass bize gönderilen POJO’nun toString metodu ile elde edilen String halini dönecek.
ServiceClass.java
ServiceClass sınıfımız bir abstract sınıf. Az sonra göreceğimiz Operation sınıfları bu sınıfı kaltıcağından ötürü bu sınıfın içinde gövdesi tanımlanmamış metotlar da yer alabilir ve abstract olması bana göre kullanıma daha uygun. Sınıf tanımlanması sırasında bu sınıfın bir parametre alacağını söylüyoruz ve
ifadesi bu sınıfa Generic olma özelliği kazandırıyor. Artık bu sınıftan kalıtım yaparken istenen tüm sınıflar parametre olarak kullanılabilir. Sınıf içerisinde entityClass adında bir nesnemiz mevcut. Bu sınıfı kalıtmış bir sınftan nesne oluşturulurken oluşturalacak bu nesne ile hangi sınıfın geldiğini konsola yazdıracağız. getStringFromEntity() metodu T tpinde bir parametre bekliyor. Yani bu metot birden farklı tipte parametreyi karşılayabilecek vaziyette. Metot içerisinde ise önce entityClass nesnesinden hangi sınıf tipinde parametre geldiğini yazdırıyoruz sonra da gelen entity’nin String halini döndürüyoruz.
StudenOperationClass.java & TeacherOperationClass.java
StudenOperationClass ve TeacherOperationClass sınıfları arasında hiçbir fark yok. ServiceClass sınıfından extend edilmeleri sırasında hangi POJO sınıfları kullanılarak işlem gerçekleştirilecekse onlar parametre olarak geçiriliyor. OperationClass’lar içinde extend edilen ServiceClass’dan yapılandırıcılar zorunlu olarak yazılıyor ve super ile ServiceClass’ın yapılandırıcısının çağırılmasında POJO sınıfları gönderiliyor.
MainClass.java
MainClass içerisindeki main metotda TeacherOperationClass ve StudentOperationClass sınıflarından birer nesne üretiyoruz. Akabinde bir Teacher nesnesi oluşturup teacherOperationClass üzerinden çağırdığımız getStringFromEntity metoduna bu teacher nesnesini geçiriyoruz. Aynı işlemi Student sınıfı için de tekrarlıyoruz. Burada nesne üzerinden ServiceClass içindeki miras alınan getStringFromEntity metodu ilk olarak aldığı POJO nesnesinin hangi sınıf tipinde olduğunu konsola yazdıracak, akabinde String halini bize döndürecek.
Konsol çıktımız şöyle:
Gördüğünüz gibi farklı tiplerden parametre almaya ve işlem yapmaya hazır bir sınıf yazdık ve kullandık. Projelerde bu şekilde merkezi, bir kez yazıp çokça kullanılabilen kod yazımı da hem projenin bakımını kolaylaştırır hem de kod kalitesinin artmasına yardımcı olur.
Bu yazıda anlatacaklarım bu kadar arkadaşlar.
Başka bir yazıda görüşene kadar sağlıcakla kalın.
Selam ve Sevgilerimle