هل هو سلوك قياسي لهذا الرمز لرمي nullpointerxception؟
-
04-10-2019 - |
سؤال
لقد واجهت مشكلة كبيرة في بعض رمز المكتبة ، والتي قمت بتعليقها في بيان واحد:
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 وعملت بشكل جيد. طبعت فارغة كما هو متوقع.