هل هناك أي سبب مبرر لاستخدام جديد ومنشئ في فئة أرقام في Java؟

StackOverflow https://stackoverflow.com/questions/1009087

  •  06-07-2019
  •  | 
  •  

سؤال

هل هناك أي سبب مبرر لشيء من هذا القبيل في جافا

Long l = new Long(SOME_CONSTANT)

يؤدي هذا إلى إنشاء كائن إضافي ويتم وضع علامة عليه بواسطة FindBugs، ومن الواضح أن هذه ممارسة سيئة.سؤالي هو هل هناك سبب وجيه للقيام بذلك؟

أنا سابقا سألت هذا عن منشئي السلسلة وحصلت على إجابة جيدة, ، ولكن يبدو أن هذه الإجابة لا تنطبق على الأرقام.

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

المحلول

وفقط إذا كنت ترغب في التأكد من الحصول على نسخة فريدة من نوعها، لذلك <الفرعية> عمليا أبدا.

ويمكن أن يكون مؤقتا بعض الأرقام عندما autoboxed (على الرغم من ليست مضمونة Longs أن )، والتي قد تسبب المشاكل. ولكن أي قانون من شأنه كسر بسبب التخزين المؤقت ربما لديه مشاكل أعمق. الآن، لا أستطيع التفكير في حالة صالحة واحدة لذلك.

نصائح أخرى

سؤالي هو هل هناك سبب وجيه للقيام بذلك؟

ربما لا يزال بإمكانك استخدامه إذا كنت تريد كتابة تعليمات برمجية متوافقة مع JREs الأقدم. قيمة (طويلة) تم تقديمه فقط في Java 1.5، لذلك في جافا 1.4 وقبل أن يكون المنشئ هو السبيل الوحيد للذهاب مباشرة من أ طويل إلى أ طويل.أتوقع عدم إهماله لأن المُنشئ لا يزال يُستخدم داخليًا.

والشيء الوحيد الذي يمكنني أن أفكر هو جعل الملاكمة وضوحا، على الرغم من أن قانون يعادل autoboxed يتم ترجمة الواقع إلى Long.valueOf (SOME_CONSTANT) التي يمكن تخزين قيم صغيرة: (من SRC JVM)

   public static Long valueOf(long l) {
    final int offset = 128;
    if (l >= -128 && l <= 127) { // will cache
        return LongCache.cache[(int)l + offset];
    }
        return new Long(l);
  }

و. ليس مشكلة كبيرة، ولكن أنا لا أحب رؤية التعليمات البرمجية التي باستمرار صناديق وunboxes بغض النظر عن نوع، والتي يمكن الحصول قذرة.

وظيفيا، على الرغم من أنني لا أرى فرقا بطريقة أو أخرى. منذ فترة طويلة الجديدة التي لا تزال تحسب على قدم المساواة وشفرة التجزئة يساوي إلى autoboxed واحد، لذلك لا استطيع ان ارى كيف يمكن أن تجعل حتى تمييز وظيفي إذا أردت.

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