"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > هل يمكنني تمرير صفيف كوسائط إلى طريقة Java مع وسيطات متغيرة؟

هل يمكنني تمرير صفيف كوسائط إلى طريقة Java مع وسيطات متغيرة؟

نشر في 2025-03-25
تصفح:534

Can I Pass an Array as Arguments to a Java Method with Variable Arguments?

هل يمكنني تمرير صفيف كوسائط إلى طريقة مع وسيطات متغيرة في java؟ عندما تمرر صفيفًا إلى طريقة قوس متغيرة ، يتم التعامل مع عناصر الصفيف كوسائط فردية لتلك الطريقة.

ضع في اعتبارك الكود التالي: سلسلة خاصة. السلسلة العامة myFormat (تنسيق السلسلة ، كائن ... args) { إرجاع string.format (التنسيق ، outravar ، args) ؛ } } في هذا المثال ، تأخذ طريقة myFormat عددًا متغيرًا من الوسائط (ممثلة بواسطة ... args) وتنسيق سلسلة باستخدام طريقة string.format. القضية هي أن ARGS يتم التعامل معها ككائن واحد [] صفيف ، وليس كوسائط فردية. لمعالجة هذا ، يمكنك الاستفادة من حقيقة أن t ... هو سكر النحوي لـ t []. توضيح ذلك ، يوضح مقتطف الكود التالي كيفية تمرير صفيف كوسائط إلى طريقة arity متغيرة:

سلسلة ثابتة عامة ezformat (Objec تنسيق السلسلة = سلسلة جديدة (new char [args.length]). استبدال ("\ 0" ، "[٪ s]") ؛ إرجاع string.format (التنسيق ، args) ؛ } الفراغ الثابت العام الرئيسي (سلسلة ... args) { System.out.println (EzFormat ("A" ، "B" ، "C")) ؛ // المطبوعات "[a] [b] [c]" }

class A {
  private String extraVar;

  public String myFormat(String format, Object... args) {
    return String.format(format, extraVar, args);
  }
}

مثال:

عدد الفراغ الثابت (كائن ... objs) System.out.println (Objs.length) ؛ } العد (NULL ، NULL ، NULL) ؛ // المطبوعات "3" العد (فارغة ، فارغة) ؛ // المطبوعات "2" العد (خالية) ؛ // يلقي java.lang.nullpointerxception !!! لتجنب ذلك ، يمكنك تمرير الوسيطة الفارغة كصفيف منفصل أو ككائن ، مثل هذا:

العد (كائن جديد [] {null}) ؛ // المطبوعات "1" العد ((كائن) فارغ) ؛ // يطبع "1"

إضافة وسيطات إضافية

public static String ezFormat(Object... args) {
    String format = new String(new char[args.length]).replace("\0", "[ %s ]");
    return String.format(format, args);
}

public static void main(String... args) {
    System.out.println(ezFormat("A", "B", "C")); // prints "[ A ][ B ][ C ]"
}

تمرير صفائف من البدائيات

طرق arity متغيرة فقط مع أنواع المراجع. لا ينطبق Autoboxing على صفائف من البدائية. لتمرير مجموعة من البدائية ، يجب أولاً تحويلها إلى صفيف من نوع التفاف:

int [] myNumbers = {1 ، 2 ، 3} ؛ System.out.println (Ezformat (myNumbers)) ؛ // يطبع "[[I@13C5982]" عدد صحيح [] myNumbers = {1 ، 2 ، 3} ؛ System.out.println (Ezformat (myNumbers)) ؛ // يطبع "[1] [2] [3]"

أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3