सामान्य कक्षाएं पुन: प्रयोज्य की सुविधा प्रदान करती हैं। जावा में सामान्य कक्षाओं का उपयोग करके अपने कोड को स्केलेबल और कुशल बनाएं।

जेनेरिक्स एक प्रोग्रामिंग अवधारणा है जो आपको उस प्रकार को निर्दिष्ट करने की अनुमति देती है जिसे आप संग्रह में संग्रहीत करना चाहते हैं। एक सामान्य प्रकार कोई भी गैर-आदिम मान हो सकता है। पारंपरिक प्रकार के पैरामीटर जिनसे आप परिचित हो सकते हैं वे स्ट्रिंग और पूर्णांक हैं।

हालाँकि, आप एक अद्वितीय सामान्य प्रकार बना सकते हैं। इसके अलावा, आप एक सामान्य वर्ग बना सकते हैं और जेनेरिक का उपयोग करके विभिन्न संग्रह बनाने के लिए इसका उपयोग कर सकते हैं।

एक सामान्य प्रकार बनाना

एक सामान्य प्रकार मूलतः एक वस्तु है, एक वर्ग का उपयोग करके बनाया गया या एक इंटरफ़ेस. तो, इस लेख के लिए, सामान्य प्रकार ग्राहक होगा। नमूना एंटरप्राइज़-स्तरीय एप्लिकेशन का उपयोग करके, ग्राहक डेटाबेस सिस्टम में एक इकाई का प्रतिनिधित्व करता है। यह डेटाबेस सिस्टम एक फ़र्निचर कंपनी को सेवा प्रदान करता है जिसके तीन अलग-अलग शहरों में तीन भौतिक स्थान हैं।

publicabstractclassCustomer{
private String name;
publicCustomer(String name){
this.name = name;
}
public String getName(){
return name;
}
}
instagram viewer

आप नोटिस करेंगे अमूर्त में कीवर्ड ग्राहक उपरोक्त वर्ग घोषणा. इसका मतलब है कि आप इससे सीधा प्रकार या ऑब्जेक्ट नहीं बना सकते ग्राहक प्रकार।

यह देखते हुए कि प्रत्येक भौतिक स्टोर स्थान में ग्राहकों की एक अनूठी सूची होगी, एप्लिकेशन को तीन ग्राहक उपवर्गों की आवश्यकता होगी जिन्हें आप उपयोग करके लागू करेंगे विरासत प्रोग्रामिंग अवधारणा.

ये तीन उपवर्ग सामान्य से ठोस प्रकार होंगे ग्राहक प्रकार। पहला ग्राहक उपवर्ग में निम्नलिखित कोड होगा:

publicclassCity1CustomerextendsCustomer{
publicCity1Customer(String name){
super(name);
}
}

एक जेनेरिक क्लास बनाना

सामान्य प्रकार का उपयोग करने के लिए, आपके पास एक सामान्य वर्ग या विधि की आवश्यकता होगी जो इस प्रकार को एक पैरामीटर के रूप में स्वीकार करे। एक सामान्य वर्ग बनाने के लिए, आपको बस वर्ग घोषणा में प्रकार पैरामीटर सम्मिलित करना होगा।

publicclassPromotion<T> {}

उपरोक्त कोड इंगित करता है कि पदोन्नति वर्ग सामान्य है. इसका मतलब यह है कि पदोन्नति वर्ग अपनी वस्तुओं को बनाने के लिए प्रकारों का उपयोग करता है। अब वर्ग घोषणा उन वस्तुओं का संग्रह ले सकती है जो स्ट्रिंग, पूर्णांक, ग्राहक इत्यादि हैं। हालाँकि, फ़र्निचर कंपनी केवल यही चाहती है पदोन्नति का उपयोग करके ऑब्जेक्ट बनाने के लिए क्लास ग्राहक प्रकार.

publicclassPromotion<TextendsCustomer> {}

उपरोक्त अद्यतन कोड यह सुनिश्चित करता है कि पदोन्नति कक्षा केवल लेती है ग्राहक प्रकार, इसका मतलब सभी उपवर्ग हैं ग्राहक कक्षा।

यह देखते हुए कि तीन स्टोर हैं, कंपनी प्रत्येक स्टोर के लिए एक स्वतंत्र प्रमोशन बनाना चाहती है। इन प्रमोशनों के लिए आवश्यक डेटा समान हैं। प्रत्येक प्रमोशन में एक नाम और उन ग्राहकों का संग्रह होगा जो उस प्रमोशन में जीते थे।

इस समस्या से निपटने के कई तरीके हैं। आप एक बना सकते हैं पदोन्नति मूल वर्ग और प्रत्येक स्टोर स्थान के लिए तीन उपवर्ग हैं। लेकिन प्रत्येक के बाद से पदोन्नति एक समान संरचना है, तो आप डुप्लिकेट कोड लिखना समाप्त कर देंगे, जो अक्षम है (खासकर जब से आप पहले से ही काम कर रहे हैं ग्राहक उपवर्ग)।

इसलिए, ए पदोन्नति जेनेरिक क्लास इस समस्या के अधिक कुशल समाधानों में से एक है।

import java.util.ArrayList;

publicclassPromotion<TextendsCustomer> {

private String promoName;
private ArrayList winners = 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();
}
}

पदोन्नति सामान्य वर्ग में एक ही चर होता है (प्रोमोनाम). यह जावा क्लास प्रमोशन जीतने वाले (विजेताओं) ग्राहकों का एक संग्रह स्वीकार करता है और उन्हें एक में संग्रहीत करता है ArrayList डेटा संरचना. किसी विशिष्ट प्रचार संग्रह में एक नया ग्राहक जोड़ने के लिए, आपको इसका उपयोग करना होगा ग्राहक जोड़ें() तरीका। यदि किसी भी समय आप किसी संग्रह में मौजूद ग्राहकों की संख्या जानना चाहते हैं, तो आप इसका आह्वान कर सकते हैं संख्याविजेता() तरीका।

जेनेरिक क्लास का उपयोग करके संग्रह बनाना

इससे पहले कि आप संग्रह बनाना शुरू करें, आपको ग्राहक बनाने होंगे।

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");
}
}

मुख्य उपरोक्त वर्ग चार ग्राहक ऑब्जेक्ट बनाता है, प्रत्येक तीन स्टोर स्थानों में से एक से संबंधित होता है। संग्रह बनाना शुरू करने के लिए आपको पहले प्रमोशन ऑब्जेक्ट (प्रत्येक स्टोर स्थान के लिए एक) बनाने की आवश्यकता होगी।

Promotion city1promo = new Promotion("City1 Promo");
Promotion city2promo = new Promotion("City2 Promo");
Promotion city3promo = new Promotion("City3 Promo");

उपरोक्त कोड की तीन पंक्तियाँ सम्मिलित करना मुख्य क्लास प्रभावी रूप से तीन प्रकार-विशिष्ट (या स्थान-विशिष्ट) प्रमोशन बनाएगी। इसलिए, केवल पहले शहर के स्थान वाले स्टोर के ग्राहक (शहर1ग्राहक) उस शहर के प्रमोशन में विजेता हो सकता है (सिटी1प्रोमो).

city1promo.addCustomer(john);
city1promo.addCustomer(kelly);

इसलिए, उपरोक्त कोड को इसमें जोड़ रहा हूँ मुख्य क्लास कंसोल में निम्नलिखित परिणाम उत्पन्न करेगी:

हालाँकि, यदि आप पहले शहर में प्रमोशन विजेताओं की सूची में तीसरे ग्राहक को जोड़ने का प्रयास करते हैं, तो आपका आईडीई एक संकलन त्रुटि उत्पन्न करेगा।

ऐसा इसलिए है क्योंकि न तो जेन और न जेस पहले शहर में स्टोर का ग्राहक है। सामान्य प्रकार और कक्षाएं बनाना उपयोगी है, क्योंकि यह इन सरल त्रुटियों को ध्यान में नहीं आने और सिस्टम के डेटाबेस को दूषित होने से रोकता है। एक छोटे एप्लिकेशन में, इस तरह की त्रुटियों को पहचानना आसान हो सकता है लेकिन एंटरप्राइज़-स्तरीय सिस्टम में, इस तरह की त्रुटियाँ पकड़ में नहीं आ सकती हैं।

city2promo.addCustomer(jane);

कोड की ग़लत पंक्ति को उपरोक्त पंक्ति से बदलने पर निम्नलिखित आउटपुट कंसोल पर प्रिंट हो जाएगा:

सामान्य प्रकारों का उपयोग करने के लाभ

इस आलेख में नमूना एप्लिकेशन से, आप देख सकते हैं कि सामान्य प्रकारों का उपयोग करने का एक प्रमुख लाभ संकलन-समय प्रकार की जाँच करना है। प्रकार की जांच के बिना, जेन को तीन पदोन्नति सूचियों में से किसी में जोड़ने से निष्पादन-समय त्रुटि उत्पन्न नहीं होगी, क्योंकि जेन वास्तव में फर्नीचर कंपनी का ग्राहक है।

जेनरिक कोड पुन: प्रयोज्यता और स्केलेबिलिटी सहित कई अन्य लाभ भी प्रदान करता है। जैसे-जैसे कंपनी नए शहरों में फैलती है, आप मौजूदा कोड पर बहुत अधिक भरोसा करते हुए आसानी से नए प्रमोशन ऑब्जेक्ट प्रकार बना सकते हैं। सामान्य प्रकार आपको कुशल कोड बनाने की भी अनुमति देते हैं, जो सॉफ़्टवेयर विकास प्रक्रिया में सर्वोच्च प्राथमिकता है।