Genel sınıflar yeniden kullanılabilirliği kolaylaştırır. Java'daki genel sınıfları kullanarak kodunuzu ölçeklenebilir ve verimli hale getirin.
Generics, bir koleksiyonda saklamayı düşündüğünüz türü belirtmenize izin veren bir programlama konseptidir. Genel bir tür, ilkel olmayan herhangi bir değer olabilir. Aşina olabileceğiniz geleneksel tip parametreleri string ve integer'dır.
Ancak, benzersiz bir genel tür oluşturabilirsiniz. Ayrıca, bir jenerik sınıf oluşturabilir ve onu jenerikleri kullanarak farklı koleksiyonlar oluşturmak için kullanabilirsiniz.
Genel Tür Oluşturma
Genel bir tür, esasen bir nesnedir, bir sınıf kullanılarak oluşturuldu veya bir arayüz. Dolayısıyla, bu makale için genel tür bir müşteri olacaktır. Kurumsal düzeyde örnek bir uygulama kullanan müşteri, bir veritabanı sistemindeki bir varlığı temsil eder. Bu veri tabanı sistemi, üç farklı şehirde üç fiziksel lokasyona sahip bir mobilya şirketine hizmet vermektedir.
publicabstractclassCustomer{
private String name;
publicCustomer(String name){
this.name = name;
}
public String getName(){
return name;
}
}
fark edeceksin soyut anahtar kelime Müşteri yukarıdaki sınıf bildirimi. Bu, doğrudan bir tür veya nesne oluşturamayacağınız anlamına gelir. Müşteri tip.
Her fiziksel mağaza konumunun benzersiz bir müşteri listesine sahip olacağı göz önüne alındığında, uygulamanın, kullanarak uygulayacağınız üç müşteri alt sınıfına sahip olması gerekir. miras programlama konsepti.
Bu üç alt sınıf, jenerik için katı tipler olacaktır. Müşteri tip. İlk Müşteri alt sınıf aşağıdaki kodu içerecektir:
publicclassCity1CustomerextendsCustomer{
publicCity1Customer(String name){
super(name);
}
}
Genel Sınıf Oluşturma
Genel bir tür kullanmak için, bu türü parametre olarak kabul eden bir genel sınıfa veya yönteme sahip olmanız gerekir. Genel bir sınıf oluşturmak için, sınıf bildirimine type parametresini eklemeniz yeterlidir.
publicclassPromotion<T> {}
Yukarıdaki kod, Terfi sınıf geneldir. Bu şu anlama gelir: Terfi sınıf, nesnelerini oluşturmak için türleri kullanır. Artık sınıf bildirimi dizeler, tamsayılar, müşteriler vb. nesnelerin bir koleksiyonunu alabilir. Ancak mobilya firması sadece Terfi kullanarak nesneler oluşturmak için sınıf Müşteri türleri.
publicclassPromotion<TextendsCustomer> {}
Yukarıdaki güncellenmiş kod, Terfi sınıf sadece alır Müşteri türleri, bu, tüm alt sınıflar anlamına gelir Müşteri sınıf.
Üç mağaza olduğu göz önüne alındığında, şirket her mağaza için bir bağımsız promosyon oluşturmak istiyor. Bu promosyonlar için gerekli veriler benzerdir. Her promosyonun bir adı ve o promosyonda kazanan müşterilerin bir koleksiyonu olacaktır.
Bu soruna yaklaşmanın birkaç yolu vardır. oluşturabilirsiniz Terfi üst sınıf ve her mağaza konumu için üç alt sınıfa sahiptir. Ama beri her Terfi benzer bir yapıya sahipse, verimsiz olan yinelenen kodlar yazarsınız (özellikle halihazırda çalıştığınız için) Müşteri alt sınıflar).
Bu nedenle, bir Terfi genel sınıf, bu soruna daha etkili çözümlerden biridir.
import java.util.ArrayList;
publicclassPromotion<TextendsCustomer> {
private String promoName;
private ArrayListwinners = new ArrayList<>(); publicPromotion(String promoName){
this.promoName = promoName;
}public String getPromoName(){
return promoName;
}publicvoidaddCustomer(T customer){
if (winners.contains(customer)) {
System.out.println( customer.getName() + " is already a winner of this prize.");
} else {
winners.add(customer);
System.out.println( customer.getName() + " is a winner in the " + this.promoName);
}
}
publicintnumWinners(){
returnthis.winners.size();
}
}
bu Terfi jenerik sınıfın tek bir değişkeni vardır (promosyonAdı). Bu Java sınıfı, promosyonu kazanan (kazananlar) müşteri koleksiyonunu kabul eder ve bunları bir ArrayList veri yapısı. Belirli bir promosyon koleksiyonuna yeni bir müşteri eklemek için müşteri ekle() yöntem. Herhangi bir noktada bir koleksiyondaki müşterilerin sayısını öğrenmek isterseniz, sayıKazananlar() yöntem.
Genel Bir Sınıf Kullanarak Koleksiyonlar Oluşturma
Koleksiyon oluşturmaya başlamadan önce müşteri oluşturmanız gerekir.
publicclassMain{
publicstaticvoidmain(String[] args){
City1Customer john = new City1Customer("John Brown");
City1Customer kelly = new City1Customer("Kelly James");
City2Customer jane = new City2Customer("Jane Doe");
City3Customer jess = new City3Customer("Jess Smith");
}
}
bu Ana yukarıdaki sınıf, her biri üç mağaza konumundan birine ait olan dört müşteri nesnesi oluşturur. Koleksiyon oluşturmaya başlamak için önce promosyon nesneleri (her mağaza konumu için bir tane) oluşturmanız gerekir.
Promotion city1promo = new Promotion("City1 Promo");
Promotion city2promo = new Promotion("City2 Promo");
Promotion city3promo = new Promotion("City3 Promo");
Yukarıdaki üç kod satırını Ana class etkili bir şekilde üç türe özgü (veya konuma özgü) promosyon oluşturacaktır. Bu nedenle, yalnızca ilk şehir konumundaki mağazadaki müşteriler (Şehir1Müşteri) o şehrin tanıtımında kazanan olabilir (şehir1promo).
city1promo.addCustomer(john);
city1promo.addCustomer(kelly);
Bu nedenle, yukarıdaki kodun eklenmesi Ana class, konsolda aşağıdaki sonucu üretecektir:
Ancak, ilk şehirdeki promosyon kazananlar listesine üçüncü bir müşteri eklemeye çalışırsanız, IDE'niz bir derleme hatası verir.
Bunun nedeni, hiçbiri jane ne de Jess ilk şehirdeki mağazanın müşterisidir. Genel türler ve sınıflar oluşturmak, bu basit hataların yakalanmasını ve bir sistemin veritabanını bozmasını engellediği için yararlıdır. Küçük bir uygulamada bunun gibi hataları tespit etmek kolay olabilir, ancak kurumsal düzeydeki bir sistemde bunun gibi hatalar yakalanmayabilir.
city2promo.addCustomer(jane);
Hatalı kod satırını yukarıdakiyle değiştirmek konsola aşağıdaki çıktıyı yazdıracaktır:
Genel Türleri Kullanmanın Yararları
Bu makaledeki örnek uygulamadan, genel türleri kullanmanın en büyük avantajının derleme zamanı tür denetimi olduğunu görebilirsiniz. Tip kontrolü olmadan Jane'i üç promosyon listesinden herhangi birine eklemek, Jane gerçekten de mobilya şirketinin bir müşterisi olduğundan, yürütme zamanı hatasına neden olmaz.
Generics, kodun yeniden kullanılabilirliği ve ölçeklenebilirliği dahil olmak üzere diğer bazı avantajları da kolaylaştırır. Şirket yeni şehirlere doğru genişledikçe, büyük ölçüde mevcut koda dayanarak kolayca yeni promosyon nesnesi türleri oluşturabilirsiniz. Genel türler, yazılım geliştirme sürecinde en yüksek önceliğe sahip olan verimli kod oluşturmanıza da olanak tanır.