سؤال

لقد واجهت مشكلة كبيرة في بعض رمز المكتبة ، والتي قمت بتعليقها في بيان واحد:

System.out.println((String) null);

حسنًا ، لا يبدو الرمز هكذا في الواقع ، لكنه بالتأكيد يدعو println مع حجة فارغة. يؤدي القيام بذلك إلى إلقاء التطبيق الخاص بي بأكمله NullPointerException.

بشكل عام ، ينبغي println رمي هذا الاستثناء في ظل هذا الظروف ، أم أن هذا السلوك غير القياسي بسبب تنفيذ سوء تنفيذ out نموذج؟

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

المحلول

يطبع JVM من الشمس ببساطة "NULL". هذا هو السلوك المحدد لـ PrintStream.print(String) عندما تعطى أ null جدال.

نصائح أخرى

حسنًا ، وجدت الخطأ ، في تنفيذ النظام الأساسي الخاص بي PrintStream.print. أعتقد أنني سأتابعها مع المطورين.

public void print(String s) {
    // WHERE IS THE NULL CHECK??!
    for(int i=0;i<s.length();i++) {
        write(s.charAt(i));
    }
}

شكرا لتأكيد أن هذا هو في الواقع سلوك غير قياسي.

هذا أعلاه لا ينبغي أن يرمي استثناء. هل أنت متأكد من أنك ليس لديك شيء مثل:

System.out.println(a.b);

أين a هو null ?

بدلا من ذلك ، ربما الخاص بك System.out تم تعيينه على NULL (لا يدرك الكثير من الناس أنه يمكنك تعيين out/err تيارات)؟

عندما أحاول هذا الخط على سطح المكتب القياسي Java (Java SE 6 Update 20 على Mac OS X) ، فإنه لا يرمي ملف NullPointerException, ، إنه يطبع فقط null.

أعتقد أن رمي أ NullPointerException هو خطأ في هذه الحالة.

لقد حاولت للتو تشغيل هذا على Sun's JDK 6 وعملت بشكل جيد. طبعت فارغة كما هو متوقع.

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