Bu eğitimde Java Generics hakkında, jenerik sınıf ve yöntemlerinin nasıl oluşturulacağını ve örnekler yardımıyla avantajlarını öğreneceğiz.
Java Generics, farklı veri türleri (nesneler) ile kullanılabilen tek bir sınıf, arabirim ve yöntem oluşturmamızı sağlar.
Bu, kodumuzu yeniden kullanmamıza yardımcı olur.
Not : Jenerik basit türler (çalışmaz int
, float
, char
, vb).
Java Jenerik Sınıfı
Her tür veri ile kullanılabilecek bir sınıf oluşturabiliriz. Böyle bir sınıf, Generics Sınıfı olarak bilinir.
Java'da bir jenerik sınıfı nasıl oluşturabileceğimiz aşağıda açıklanmıştır:
Örnek: Bir Jenerik Sınıfı Oluşturma
class Main ( public static void main(String() args) ( // initialize generic class // with Integer data GenericsClass intObj = new GenericsClass(5); System.out.println("Generic Class returns: " + intObj.getData()); // initialize generic class // with String data GenericsClass stringObj = new GenericsClass("Java Programming"); System.out.println("Generic Class returns: " + stringObj.getData()); ) ) // create a generics class class GenericsClass ( // variable of T type private T data; public GenericsClass(T data) ( this.data = data; ) // method that return T type variable public T getData() ( return this.data; ) )
Çıktı
Genel Sınıf geri dönüşleri: 5 Genel Sınıf geri dönüşü: Java Programlama
Yukarıdaki örnekte, GenericsClass adlı genel bir sınıf oluşturduk. Bu sınıf, her tür veriyle çalışmak için kullanılabilir.
class GenericsClass (… )
Burada, açılı ayraç içinde kullanılan T , tip parametresini gösterir . İçinde
Main
sınıfta, biz GenericsClass iki nesne oluşturduk
- intObj - Burada, tür parametresi T ile değiştirilir
Integer
. Artık, GenericsClass tam sayı verileriyle çalışıyor. - stringObj - Burada, tür parametresi T ile değiştirilir
String
. Artık, GenericsClass dize verileriyle çalışıyor.
Java Generics Yöntemi
Jenerik sınıfına benzer şekilde, her tür veri ile kullanılabilecek bir yöntem de oluşturabiliriz. Böyle bir sınıf, Generics Method olarak bilinir.
Java'da bir jenerik sınıfı nasıl oluşturabileceğimiz aşağıda açıklanmıştır:
Örnek: Genel Yöntem Oluşturma
class Main ( public static void main(String() args) ( // initialize the class with Integer data DemoClass demo = new DemoClass(); // generics method working with String demo.genericsMethod("Java Programming"); // generics method working with integer demo.genericsMethod(25); ) ) class DemoClass ( // creae a generics method public void genericsMethod(T data) ( System.out.println("Generics Method:"); System.out.println("Data Passed: " + data); ) )
Çıktı
Jenerik Metodu: Geçen Veri: Java Programlama Jenerik Metodu: Aktarılan Veri: 25
Yukarıdaki örnekte, genericsMethod adında genel bir yöntem oluşturduk.
public void genericMethod(T data) (… )
Burada, tür parametresi değiştiriciden sonra
public
ve dönüş türünden önce eklenir void
.
Asıl türü ve
yöntem adından önce köşeli ayraç içine yerleştirerek jenerik yöntemi çağırabiliriz .
demo.genericMethod("Java Programming"); demo.genericMethod(25);
Not : Tür parametresini eklemeden jenerik yöntemi çağırabiliriz. Örneğin,
demo.genericsMethod("Java Programming");
Bu durumda, derleyici, yönteme iletilen değere göre tür parametresini eşleştirebilir.
Sınırlı Türler
Genel olarak, tür parametresi herhangi bir veri türünü kabul edebilir (ilkel türler hariç).
Ancak, yalnızca bazı belirli türler için jenerik kullanmak istiyorsak (sayı türlerinin verilerini kabul etmek gibi), sınırlı türleri kullanabiliriz.
Bağlı türler durumunda, extends
anahtar kelimeyi kullanırız . Örneğin,
Bu, T'nin yalnızca A'nın alt türleri olan verileri kabul edebileceği anlamına gelir.
Örnek: Sınırlı Türler
class GenericsClass ( public void display() ( System.out.println("This is a bounded type generics class."); ) ) class Main ( public static void main(String() args) ( // create an object of GenericsClass GenericsClass obj = new GenericsClass(); ) )
Yukarıdaki örnekte, GenericsClass adlı bir sınıf oluşturduk. İfadeye dikkat edin, ifadeye dikkat edin
Burada, GenericsClass sınırlı tip ile oluşturulur. Bu, GenericsClass'ın yalnızca alt öğesi olan veri türleriyle çalışabileceği anlamına gelir Number
( Integer
, Double
vb.).
Ancak, ile jenerik sınıfının bir nesnesini oluşturduk String
. Bu durumda aşağıdaki hatayı alacağız.
GenericsClass obj = new GenericsClass (); neden: çıkarım değişkeni T'nin uyumsuz sınırları eşitlik kısıtlamaları var: Dize alt sınırları: T'nin bir tür değişkeni olduğu sayı: T, GenericsClass sınıfında bildirilen sayıyı genişletir
Java Generics'in Avantajları
1. Kodun Yeniden Kullanılabilirliği
Java'daki jeneriklerin yardımıyla farklı veri türleri ile çalışacak kodlar yazabiliriz. Örneğin,
public void genericsMethod(T data) (… )
Burada jenerik bir yöntem oluşturduk. Bu aynı yöntem, tamsayı verileri, dize verileri vb. Üzerinde işlemler gerçekleştirmek için kullanılabilir.
2. Derleme zamanı Tür Denetimi
Türü parametre jenerik jenerik kodu kullanılan veri türü hakkında bilgi sağlar. Örneğin,
// using Generics GenericsClass list = new GenericsClass();
Burada, GenericsClass'ın Integer
yalnızca verilerle çalıştığını biliyoruz .
Şimdi, bu sınıfa Tamsayı dışındaki verileri aktarmaya çalışırsak, program derleme zamanında bir hata üretecektir.
3. Koleksiyonlarla Kullanıldı
Koleksiyon çerçevesi, Java'daki jenerik kavramını kullanır. Örneğin,
// creating a string type ArrayList ArrayList list1 = new ArrayList(); // creating a integer type ArrayList ArrayList list2 = new ArrayList();
Yukarıdaki örnekte, farklı veri türleriyle çalışmak için aynı ArrayList sınıfını kullandık.
Benzer ArrayList
diğer koleksiyonları ( LinkedList
, Queue
, Maps
ve benzeri) da Java geneldir.