logo

الأدوية العامة في جافا

ال جافا الأدوية العامة تم تقديم البرمجة في J2SE 5 للتعامل مع الكائنات الآمنة. فهو يجعل التعليمات البرمجية مستقرة عن طريق اكتشاف الأخطاء في وقت الترجمة.

ما هي أبعاد شاشة الكمبيوتر الخاص بي

قبل الأنواع العامة، يمكننا تخزين أي نوع من الكائنات في المجموعة، أي غير عامة. الآن تجبر الأدوية العامة مبرمج جافا على تخزين نوع معين من الكائنات.

الاستفادة من الأدوية العامة جافا

هناك بشكل رئيسي 3 مزايا للأدوية الجنيسة. وهم على النحو التالي:

1) نوع السلامة: يمكننا الاحتفاظ بنوع واحد فقط من الكائنات بشكل عام. لا يسمح بتخزين أشياء أخرى.

بدون الجينات، يمكننا تخزين أي نوع من الكائنات.

 List list = new ArrayList(); list.add(10); list.add('10'); With Generics, it is required to specify the type of object we need to store. List list = new ArrayList(); list.add(10); list.add('10');// compile-time error 

2) نوع الصب غير مطلوب: ليست هناك حاجة لطباعة الكائن.

قبل الأدوية العامة، نحتاج إلى كتابة cast.

 List list = new ArrayList(); list.add('hello'); String s = (String) list.get(0);//typecasting After Generics, we don't need to typecast the object. List list = new ArrayList(); list.add('hello'); String s = list.get(0); 

3) التحقق من وقت الترجمة: يتم التحقق منه في وقت الترجمة لذلك لن تحدث المشكلة في وقت التشغيل. تقول استراتيجية البرمجة الجيدة أنه من الأفضل بكثير التعامل مع المشكلة في وقت الترجمة بدلاً من وقت التشغيل.

 List list = new ArrayList(); list.add('hello'); list.add(32);//Compile Time Error 

بناء الجملة لاستخدام جمع عام

 ClassOrInterface 

مثال لاستخدام الأدوية العامة في Java

 ArrayList 

مثال كامل للأدوية العامة في جافا

نحن هنا نستخدم فئة ArrayList، ولكن يمكنك استخدام أي فئة تجميع مثل ArrayList وLinkedList وHashSet وTreeSet وHashMap وComparator وما إلى ذلك.

 import java.util.*; class TestGenerics1{ public static void main(String args[]){ ArrayList list=new ArrayList(); list.add('rahul'); list.add('jai'); //list.add(32);//compile time error String s=list.get(1);//type casting is not required System.out.println('element is: '+s); Iterator itr=list.iterator(); while(itr.hasNext()){ System.out.println(itr.next()); } } } 

 import java.util.*; class TestGenerics1{ public static void main(String args[]){ ArrayList list=new ArrayList(); list.add('rahul'); list.add('jai'); //list.add(32);//compile time error String s=list.get(1);//type casting is not required System.out.println('element is: '+s); Iterator itr=list.iterator(); while(itr.hasNext()){ System.out.println(itr.next()); } } } 
اختبره الآن

انتاج:

 element is: jai rahul jai 

مثال على Java Generics باستخدام Map

الآن سوف نستخدم عناصر الخريطة باستخدام الأدوية العامة. هنا، نحن بحاجة لتمرير المفتاح والقيمة. دعونا نفهم ذلك بمثال بسيط:

 import java.util.*; class TestGenerics2{ public static void main(String args[]){ Map map=new HashMap(); map.put(1,&apos;vijay&apos;); map.put(4,&apos;umesh&apos;); map.put(2,&apos;ankit&apos;); //Now use Map.Entry for Set and Iterator Set<map.entry> set=map.entrySet(); Iterator<map.entry> itr=set.iterator(); while(itr.hasNext()){ Map.Entry e=itr.next();//no need to typecast System.out.println(e.getKey()+&apos; &apos;+e.getValue()); } }} </map.entry></map.entry>
اختبره الآن

انتاج |

نموذج TCP وIP
 1 vijay 2 ankit 4 umesh 

فئة عامة

تُعرف الفئة التي يمكن أن تشير إلى أي نوع بالفئة العامة. نحن هنا نستخدم معلمة النوع T لإنشاء فئة عامة لنوع معين.

دعونا نرى مثالاً بسيطًا لإنشاء الفصل العام واستخدامه.

إنشاء فئة عامة:

 class MyGen{ T obj; void add(T obj){this.obj=obj;} T get(){return obj;} } 

يشير النوع T إلى أنه يمكن أن يشير إلى أي نوع (مثل String وInteger وEmployee). سيتم استخدام النوع الذي تحدده للفئة لتخزين البيانات واستردادها.

باستخدام فئة عامة:

دعونا نرى الكود لاستخدام الفئة العامة.

 class TestGenerics3{ public static void main(String args[]){ MyGen m=new MyGen(); m.add(2); //m.add(&apos;vivek&apos;);//Compile time error System.out.println(m.get()); }} 
اختبره الآن

انتاج |

 2 

نوع المعلمات

تعد اصطلاحات تسمية معلمات النوع مهمة لتعلم الأدوية العامة بدقة. معلمات النوع الشائعة هي كما يلي:

مربع القائمة جافا
  1. تي - النوع
  2. ه - العنصر
  3. ك - مفتاح
  4. ن - الرقم
  5. الخامس - القيمة

الطريقة العامة

مثل الفئة العامة، يمكننا إنشاء طريقة عامة يمكنها قبول أي نوع من الوسائط. هنا، يقتصر نطاق الوسائط على الطريقة التي تم الإعلان عنها. فهو يسمح بطرق ثابتة وغير ثابتة.

دعونا نرى مثالاً بسيطًا لطريقة جافا العامة لطباعة عناصر المصفوفة. نحن نستخدم هنا و للدلالة على العنصر.

 public class TestGenerics4{ public static void printArray(E[] elements) { for ( E element : elements){ System.out.println(element ); } System.out.println(); } public static void main( String args[] ) { Integer[] intArray = { 10, 20, 30, 40, 50 }; Character[] charArray = { &apos;J&apos;, &apos;A&apos;, &apos;V&apos;, &apos;A&apos;, &apos;T&apos;,&apos;P&apos;,&apos;O&apos;,&apos;I&apos;,&apos;N&apos;,&apos;T&apos; }; System.out.println( &apos;Printing Integer Array&apos; ); printArray( intArray ); System.out.println( &apos;Printing Character Array&apos; ); printArray( charArray ); } } 
اختبره الآن

انتاج |

 Printing Integer Array 10 20 30 40 50 Printing Character Array J A V A T P O I N T 

حرف البدل في Java Generics

ال ؟ يمثل الرمز (علامة الاستفهام) عنصر البدل. يعني أي نوع إذا كتبنا، فهذا يعني أي فئة فرعية من الرقم، على سبيل المثال، عدد صحيح، تعويم، ومزدوج. الآن يمكننا استدعاء طريقة فئة الرقم من خلال أي كائن فئة فرعية.

يمكننا استخدام حرف البدل باعتباره نوع المعلمة أو الحقل أو نوع الإرجاع أو المتغير المحلي. ومع ذلك، لا يُسمح باستخدام حرف البدل كوسيطة كتابة لاستدعاء أسلوب عام، أو إنشاء مثيل فئة عام، أو نوع فائق .

دعونا نفهم ذلك من خلال المثال الموضح أدناه:

 import java.util.*; abstract class Shape{ abstract void draw(); } class Rectangle extends Shape{ void draw(){System.out.println(&apos;drawing rectangle&apos;);} } class Circle extends Shape{ void draw(){System.out.println(&apos;drawing circle&apos;);} } class GenericTest{ //creating a method that accepts only child class of Shape public static void drawShapes(List lists){ for(Shape s:lists){ s.draw();//calling method of Shape class by child class instance } } public static void main(String args[]){ List list1=new ArrayList(); list1.add(new Rectangle()); List list2=new ArrayList(); list2.add(new Circle()); list2.add(new Circle()); drawShapes(list1); drawShapes(list2); }} 

انتاج |

 drawing rectangle drawing circle drawing circle 

أحرف البدل ذات الحدود العليا

الغرض من أحرف البدل ذات الحدود العليا هو تقليل القيود المفروضة على المتغير. إنه يقيد النوع غير المعروف ليكون نوعًا محددًا أو نوعًا فرعيًا من هذا النوع. يتم استخدامه من خلال الإعلان عن حرف البدل ('؟') متبوعًا بالكلمة الأساسية الممتدة (في حالة الفئة) أو الكلمة الرئيسية المنفذة (في حالة الواجهة)، متبوعة بالحد الأعلى لها.

بناء الجملة

 List 

هنا،

؟ هو حرف البدل.

مامتا كولكارني الممثل

يمتد ، هي كلمة رئيسية.

رقم ، هو فئة موجودة في حزمة Java.lang

لنفترض أننا نريد كتابة الطريقة لقائمة الأرقام وأنواعها الفرعية (مثل عدد صحيح ومزدوج). استخدام قائمة مناسب لقائمة النوع Number أو أي من فئاته الفرعية بينما قائمة يعمل مع قائمة النوع رقم فقط. لذا، قائمة أقل تقييدًا من قائمة .

مثال على حرف البدل العلوي المنضم

في هذا المثال، نستخدم أحرف البدل ذات الحد العلوي لكتابة طريقة القائمة والقائمة.

 import java.util.ArrayList; public class UpperBoundWildcard { private static Double add(ArrayList num) { double sum=0.0; for(Number n:num) { sum = sum+n.doubleValue(); } return sum; } public static void main(String[] args) { ArrayList l1=new ArrayList(); l1.add(10); l1.add(20); System.out.println(&apos;displaying the sum= &apos;+add(l1)); ArrayList l2=new ArrayList(); l2.add(30.0); l2.add(40.0); System.out.println(&apos;displaying the sum= &apos;+add(l2)); } } 
اختبره الآن

انتاج |

 displaying the sum= 30.0 displaying the sum= 70.0 

أحرف البدل غير محدودة

يمثل نوع حرف البدل غير المحدود قائمة من نوع غير معروف مثل القائمة. يمكن أن يكون هذا الأسلوب مفيدًا في السيناريوهات التالية: -

  • عندما يتم تنفيذ الطريقة المحددة باستخدام الوظيفة المتوفرة في فئة الكائن.
  • عندما يحتوي الفصل العام على أساليب لا تعتمد على معلمة النوع.

مثال على أحرف البدل غير المحدودة

 import java.util.Arrays; import java.util.List; public class UnboundedWildcard { public static void display(List list) { for(Object o:list) { System.out.println(o); } } public static void main(String[] args) { List l1=Arrays.asList(1,2,3); System.out.println(&apos;displaying the Integer values&apos;); display(l1); List l2=Arrays.asList(&apos;One&apos;,&apos;Two&apos;,&apos;Three&apos;); System.out.println(&apos;displaying the String values&apos;); display(l2); } } 
اختبره الآن

انتاج |

 displaying the Integer values 1 2 3 displaying the String values One Two Three 

أحرف البدل ذات الحدود السفلية

الغرض من أحرف البدل ذات الحدود المنخفضة هو تقييد النوع غير المعروف ليكون نوعًا محددًا أو نوعًا فائقًا من هذا النوع. يتم استخدامه من خلال الإعلان عن حرف البدل ('?') متبوعًا بالكلمة الأساسية super، متبوعة بالحد الأدنى لها.

بناء الجملة

 List 

هنا،

؟ هو حرف البدل.

ممتاز ، هي كلمة رئيسية.

عدد صحيح ، هي فئة مجمعة.

جافا أثناء الشرط

لنفترض أننا نريد كتابة الطريقة لقائمة الأعداد الصحيحة ونوعها الفائق (مثل الرقم والكائن). استخدام قائمة مناسب لقائمة من النوع Integer أو أي من فئاته الفائقة بينما قائمة يعمل مع القائمة من النوع عدد صحيح فقط. لذا، قائمة أقل تقييدًا من قائمة .

مثال على حرف البدل ذو الحد الأدنى

في هذا المثال، نستخدم أحرف البدل ذات الحد الأدنى لكتابة طريقة القائمة والقائمة.

 import java.util.Arrays; import java.util.List; public class LowerBoundWildcard { public static void addNumbers(List list) { for(Object n:list) { System.out.println(n); } } public static void main(String[] args) { List l1=Arrays.asList(1,2,3); System.out.println(&apos;displaying the Integer values&apos;); addNumbers(l1); List l2=Arrays.asList(1.0,2.0,3.0); System.out.println(&apos;displaying the Number values&apos;); addNumbers(l2); } } 
اختبره الآن

انتاج |

 displaying the Integer values 1 2 3 displaying the Number values 1.0 2.0 3.0