سؤال

هل هناك أي سبب لاستخدام integer.valueof (x) لتهيئة عدد صحيح نهائي ، على النحو التالي:

public class MyClass
{
  public static final Integer DAY_1 = Integer.valueOf(1); // Why do it this way?
  public static final Integer DAY_2 = 2; // When it can be done this way?
}

أفهم أن هذا كان ضروريًا في الإصدارات القديمة من Java قبل إضافة Autoboxing. هل يبقى أي سبب لهذا النوع من التعليمات البرمجية؟ أم أنها مجرد عادة سيئة؟

هل كانت مفيدة؟

المحلول

  • هناك الكثير من التعليمات البرمجية المكتوبة قبل أن يخرج 1.5. ليست هناك حاجة لتحديث كل شيء دون تحقيق أي فائدة.
  • في بعض الحالات ، يجعلك أكثر وضوحًا نكون ملاكمة. في الحالة التي أعطيتها ، يمكنك رؤية النوع المستهدف بسهولة على نفس السطر - ولكن هذا ليس هو الحال دائمًا.
  • إذا كنت ترغب في استدعاء طريقة تحتوي على أحمال زائدة لكليهما Integer و int وتريد الاتصال Integer الحمل الزائد ، هذه طريقة سهلة للقيام بذلك.

نصائح أخرى

قد يختار المبرمج كتابته بهذه الطريقة للتأكيد بصريًا على أن Day_1 هو عدد صحيح (كائن) ، وليس int.

أنا لا أقول إنني أوصي بذلك ، لكن يمكنني أن أتخيل شخصًا يتبع هذا النهج لهذا السبب.

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

إذا كان هذا هو الحال ، فليس هناك الكثير من الخيارات إلى جانب استخدام الأول ، حتى في مثل هذه الحالات حيث لا تكتسب الكثير.

بقدر ما يتعلق الأمر بالمترجم ، لا يوجد فرق (على الرغم من أنه ينبغي للمرء استخدام الرعاية في حالة الحجج الزائدة). تحت الغطاء ، يتم تحويل النموذج الموضح لـ Day_2 ببساطة إلى النموذج المستخدم لـ Day_1 بواسطة برنامج التحويل البرمجي.

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

يمكن أن تؤدي Autoboxing إلى حشرات خفية للغاية قد يكون من الصعب جدًا العثور عليها. ولهذا السبب ، فإن بعض IDEs لديها القدرة على توليد تحذير عند استخدام أي نوع من الملاكمة/غير الملاكمة. إذا كنت ترغب في إسكات خيار التحذيرات هذا ، فسوف يفعل ذلك من أجلك.

لذلك ، في النهاية ، كل هذا يعود إلى التفضيلات الشخصية ومعايير ترميز المشروع.

في هذه الحالة بالذات ، لا يوجد خطر على استخدام Autoboxing.

integer.valueof (1) يسمح بتخزين المؤقت للقيم المشتركة ؛ بالنسبة للقيم من -128 إلى 128 ، ستعيد دائمًا نفس الكائن على سبيل المثال ، في حين أن عددًا صحيحًا جديدًا (1) ستعيد دائمًا كائنًا جديدًا. أود أن أقول أنه من الممارسات الجيدة استخدام هذا لجميع الأنواع المستمدة من الأرقام (عدد صحيح ، طويل ، كبير ، وما إلى ذلك) ، على الرغم من أن هذا ربما هو ما يفعله Autoboxing تحت الأغطية على أي حال.

Bart van Heukelom ، الفرق بين List.remove (1) و list.remove (عدد صحيح جديد (1)) هو هذا ؛ ستقوم List.Remove (1) بإزالة الكائن في الفهرس 1 من القائمة ، القائمة. remove (عدد صحيح جديد (1)) سيقوم بإزالة جميع الكائنات في القائمة التي تساوي كائن عدد صحيح بقيمة واحدة. تذكر أن المجموعات لا يمكن تخزين البدائل ، فقط الأشياء.

إنها عادة سيئة وليس هناك سبب للقيام بذلك لأن الترجمة سوف يولد Integer.valueOf() لك.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top