في Java Generics، يتم استخدام أحرف البدل عندما لا تعرف النوع الدقيق. أنها تتيح لك كتابة تعليمات برمجية مرنة وقابلة لإعادة الاستخدام. يتم تمثيل حرف البدل بـ ؟ (علامة الاستفهام). تُستخدم أحرف البدل بشكل أساسي في معلمات الطريقة لقبول الأنواع العامة المختلفة بأمان.
أنواع أحرف البدل في جافا
1. أحرف البدل ذات الحدود العليا
يمكن استخدام أحرف البدل هذه عندما تريد تخفيف القيود المفروضة على المتغير. على سبيل المثال، لنفترض أنك تريد كتابة طريقة تعمل على القائمة< Integer >قائمة< Double >والقائمة< Number >يمكنك القيام بذلك باستخدام أحرف البدل ذات الحدود العليا.
للإعلان عن حرف بدل ذي حد علوي، استخدم حرف البدل ('?') متبوعًا بالكلمة الأساسية الممتدة متبوعة بحدها العلوي.
إضافة الفراغ الثابت العام (List extends Number>قائمة)
سلسلة إلحاق جافا
تطبيق:
Javaimport java.util.Arrays; import java.util.List; class WildcardDemo { public static void main(String[] args) { // Upper Bounded Integer List List<Integer> list1 = Arrays.asList(4 5 6 7); System.out.println('Total sum is:' + sum(list1)); // Double list List<Double> list2 = Arrays.asList(4.1 5.1 6.1); System.out.print('Total sum is:' + sum(list2)); } private static double sum(List extends Number> list) { double sum = 0.0; for (Number i : list) { sum += i.doubleValue(); } return sum; } }
الإخراج
Total sum is:22.0 Total sum is:15.299999999999999
توضيح: في البرنامج أعلاه، تحتوي القائمة 1 على قيم عددية، بينما تحتوي القائمة 2 على قيم مزدوجة. يتم تمرير كلاهما إلى طريقة المجموع التي تستخدم حرف البدل extends Number>. هذا يعني أنه يمكنه قبول أي قائمة من النوع الذي يمثل فئة فرعية من الرقم مثل عدد صحيح أو مزدوج.
2. أحرف البدل ذات الحدود السفلية
يتم التعبير عنها باستخدام حرف البدل ('?') متبوعًا بالكلمة الأساسية super متبوعة بحدها الأدنى: super A>.
يساوي طريقة جافا
بناء الجملة: نوع المجموعة super A>
تطبيق:
Javaimport java.util.Arrays; import java.util.List; class WildcardDemo { public static void main(String[] args) { // Lower Bounded Integer List List<Integer> list1 = Arrays.asList(4 5 6 7); // Integer list object is being passed printOnlyIntegerClassorSuperClass(list1); // Number list List<Number> list2 = Arrays.asList(4 5 6 7); // Integer list object is being passed printOnlyIntegerClassorSuperClass(list2); } public static void printOnlyIntegerClassorSuperClass( List super Integer> list) { System.out.println(list); } }
الإخراج
[4 5 6 7] [4 5 6 7]
توضيح: هنا تقبل الطريقة printOnlyIntegerClassorSuperClass العدد الصحيح فقط أو فئاته الفائقة (مثل الرقم). إذا حاولت تمرير قائمة Double، فسيعطيك خطأ في وقت الترجمة لأن Double ليس فئة فائقة من Integer.
ملحوظة: استخدم حرف البدل الممتد عندما تريد الحصول على قيم من البنية وحرف البدل الفائق عندما تضع قيمًا في البنية. لا تستخدم أحرف البدل عندما تحصل على القيم وتضعها في البنية. يمكنك تحديد حد أعلى لحرف البدل أو يمكنك تحديد حد أدنى ولكن لا يمكنك تحديد كليهما.
3. حرف بدل غير محدود
يتم تحديد نوع حرف البدل هذا باستخدام حرف البدل (؟) على سبيل المثال القائمة. وهذا ما يسمى قائمة الأنواع غير المعروفة. هذه مفيدة في الحالات التالية -
boto3
- عند كتابة طريقة يمكن استخدامها باستخدام الوظائف المتوفرة في فئة الكائن.
- عندما يستخدم الكود أساليب في فئة عامة لا تعتمد على معلمة النوع
تطبيق:
Javaimport java.util.Arrays; import java.util.List; class unboundedwildcardemo { public static void main(String[] args) { // Integer List List<Integer> list1 = Arrays.asList(1 2 3); // Double list List<Double> list2 = Arrays.asList(1.1 2.2 3.3); printlist(list1); printlist(list2); } private static void printlist(List> list) { System.out.println(list); } }
الإخراج
[1 2 3] [1.1 2.2 3.3]