คำถามติดแท็ก nullpointerexception

ข้อยกเว้น Java เกิดขึ้นเมื่อแอ็พพลิเคชันพยายามใช้ null ในกรณีที่ต้องการอ็อบเจ็กต์

9
ทำไมต้องโยน NullPointerException อย่างชัดเจนแทนที่จะปล่อยให้มันเกิดขึ้นเองตามธรรมชาติ?
เมื่ออ่านซอร์สโค้ดของ JDK ฉันพบว่าเป็นเรื่องธรรมดาที่ผู้เขียนจะตรวจสอบพารามิเตอร์ว่าเป็นโมฆะหรือไม่จากนั้นให้โยน NullPointerException () ใหม่ด้วยตนเอง ทำไมพวกเขาทำมัน ฉันคิดว่าไม่จำเป็นต้องทำเช่นนั้นเพราะมันจะโยน NullPointerException ใหม่ () เมื่อเรียกวิธีการใด ๆ (นี่คือซอร์สโค้ดของ HashMap ตัวอย่างเช่น :) public V computeIfPresent(K key, BiFunction<? super K, ? super V, ? extends V> remappingFunction) { if (remappingFunction == null) throw new NullPointerException(); Node<K,V> e; V oldValue; int hash = hash(key); if ((e = …

6
กรองค่าเฉพาะในกรณีที่ไม่ใช่ค่า null โดยใช้แลมบ์ดาใน Java8
carฉันมีรายชื่อของวัตถุที่พูด ฉันต้องการที่จะกรองรายการนี้ขึ้นอยู่กับพารามิเตอร์บางโดยใช้ Java 8. แต่ถ้าพารามิเตอร์เป็นมันจะพ่นnull NullPointerExceptionจะกรองค่า Null ได้อย่างไร? รหัสปัจจุบันมีดังนี้ requiredCars = cars.stream().filter(c -> c.getName().startsWith("M")); นี้พ่นNullPointerExceptionถ้าผลตอบแทนgetName()null

9
วิธีการใช้คำอธิบายประกอบ @Nullable และ @Nonnull มีประสิทธิภาพมากขึ้นได้อย่างไร
ฉันเห็นว่าคำอธิบายประกอบ@Nullableและอาจมีประโยชน์ในการป้องกันs แต่พวกเขาไม่เผยแพร่ไกลมาก@NonnullNullPointerException ประสิทธิผลของการเพิ่มความคิดเห็นเหล่านี้จะลดลงอย่างสมบูรณ์หลังจากผ่านไปหนึ่งระดับทางอ้อมดังนั้นหากคุณเพิ่มเพียงไม่กี่อย่างพวกเขาก็จะไม่เผยแพร่ไกลมากนัก เนื่องจากคำอธิบายประกอบเหล่านี้ไม่ได้บังคับใช้อย่างดีมีความเสี่ยงที่จะถือว่าค่าที่ทำเครื่องหมายด้วย@Nonnullนั้นไม่เป็นโมฆะดังนั้นจึงไม่สามารถทำการตรวจสอบโมฆะได้ โค้ดข้างล่างนี้เป็นสาเหตุของพารามิเตอร์ที่มีเครื่องหมาย@Nonnullที่จะเป็นnullโดยไม่ต้องเพิ่มข้อร้องเรียนใด ๆ มันจะพ่นNullPointerExceptionเมื่อมันถูกเรียกใช้ public class Clazz { public static void main(String[] args){ Clazz clazz = new Clazz(); // this line raises a complaint with the IDE (IntelliJ 11) clazz.directPathToA(null); // this line does not clazz.indirectPathToA(null); } public void indirectPathToA(Integer y){ directPathToA(y); } public void directPathToA(@Nonnull Integer …

4
บูลีนตัวดำเนินการตามเงื่อนไขและการทำกล่องอัตโนมัติ
ทำไมถึงโยน NullPointerException public static void main(String[] args) throws Exception { Boolean b = true ? returnsNull() : false; // NPE on this line. System.out.println(b); } public static Boolean returnsNull() { return null; } ในขณะที่สิ่งนี้ไม่ public static void main(String[] args) throws Exception { Boolean b = true ? null : false; …

4
ทำไม String.valueOf (null) จึงโยน NullPointerException
ตามเอกสารวิธีการString.valueOf(Object obj)คืนค่า: ถ้าอาร์กิวเมนต์เป็นnullสตริงเท่ากับ"null"; มิฉะนั้นมูลค่าของobj.toString()จะถูกส่งกลับ แต่เมื่อฉันพยายามทำสิ่งนี้: System.out.println("String.valueOf(null) = " + String.valueOf(null)); มันพ่น NPE แทน? (ลองเองถ้าไม่เชื่อ!) ข้อยกเว้นในเธรด "main" java.lang.NullPointerException ที่ java.lang.String. (ไม่ทราบแหล่งที่มา) ที่ java.lang.String.valueOf (ไม่ทราบแหล่งที่มา) มันเกิดขึ้นได้อย่างไร? เอกสารโกหกฉันหรือเปล่า นี่เป็นข้อผิดพลาดที่สำคัญใน Java หรือไม่?

19
Null check chain เทียบกับการจับ NullPointerException
บริการเว็บส่งคืน XML ขนาดใหญ่และฉันต้องการเข้าถึงช่องที่ซ้อนกันอย่างลึกซึ้ง ตัวอย่างเช่น: return wsObject.getFoo().getBar().getBaz().getInt() ปัญหาคือว่าgetFoo(), getBar(), อาจกลับมาทั้งหมดgetBaz()null อย่างไรก็ตามหากฉันตรวจสอบnullในทุกกรณีรหัสจะดูละเอียดมากและอ่านยาก ยิ่งไปกว่านั้นฉันอาจพลาดการตรวจสอบบางฟิลด์ if (wsObject.getFoo() == null) return -1; if (wsObject.getFoo().getBar() == null) return -1; // maybe also do something with wsObject.getFoo().getBar() if (wsObject.getFoo().getBar().getBaz() == null) return -1; return wsObject.getFoo().getBar().getBaz().getInt(); เป็นที่ยอมรับหรือไม่ที่จะเขียน try { return wsObject.getFoo().getBar().getBaz().getInt(); } catch (NullPointerException ignored) { return -1; …

8
ไม่พบ @Nullable ใน javax.annotation *
ฉันต้องการใช้บันทึกย่อที่จะกำจัด@Nullable NullPointerExceptionsผมพบว่าบทเรียนบางอย่างในสุทธิผมสังเกตเห็นว่าคำอธิบายประกอบนี้มาจากแพคเกจjavax.annotation.Nullable; แต่เมื่อฉันนำเข้ามันเกิดข้อผิดพลาดในการคอมไพล์: ไม่พบสัญลักษณ์

5
Boolean.valueOf () สร้าง NullPointerException ในบางครั้ง
ฉันมีรหัสนี้: package tests; import java.util.Hashtable; public class Tests { public static void main(String[] args) { Hashtable<String, Boolean> modifiedItems = new Hashtable<String, Boolean>(); System.out.println("TEST 1"); System.out.println(modifiedItems.get("item1")); // Prints null System.out.println("TEST 2"); System.out.println(modifiedItems.get("item1") == null); // Prints true System.out.println("TEST 3"); System.out.println(Boolean.valueOf(null)); // Prints false System.out.println("TEST 4"); System.out.println(Boolean.valueOf(modifiedItems.get("item1"))); // Produces NullPointerException System.out.println("FINISHED!"); // …

13
NullPointerException เข้าถึงมุมมองใน onCreate ()
นี่เป็นคำถามที่ยอมรับได้สำหรับปัญหาที่มักโพสต์บน StackOverflow ฉันกำลังติดตามบทแนะนำ ฉันได้สร้างกิจกรรมใหม่โดยใช้วิซาร์ด ฉันจะได้รับNullPointerExceptionเมื่อพยายามที่จะเรียกวิธีการในViews รับกับในกิจกรรมของฉันfindViewById()onCreate() กิจกรรมonCreate(): @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); View something = findViewById(R.id.something); something.setOnClickListener(new View.OnClickListener() { ... }); // NPE HERE if (savedInstanceState == null) { getSupportFragmentManager().beginTransaction() .add(R.id.container, new PlaceholderFragment()).commit(); } } XML เค้าโครง ( fragment_main.xml): <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" …

3
เหตุใด int num = Integer.getInteger (“ 123”) จึงโยน NullPointerException
รหัสต่อไปนี้พ่นNullPointerException: int num = Integer.getInteger("123"); คอมไพเลอร์ของฉันเรียกใช้getIntegernull เนื่องจากเป็นแบบคงที่หรือไม่ นั่นไม่สมเหตุสมผลเลย! เกิดอะไรขึ้น?

11
Eclipse / Android:“ ข้อผิดพลาดในการเรียกใช้ตัวสร้าง 'Android Pre Compiler' ในโครงการ ... ”
พยายามทำงานบางอย่างในโครงการ Android ฉันไม่ได้ทำงานมาสองสามเดือนแล้ว แต่ทุกครั้งที่พยายามสร้างโครงการ Eclipse จะมีกล่องโต้ตอบขึ้นมาว่า: 'Building workspace' has encountered a problem Errors occurred during the build. Errors running builder 'Android Pre Compiler' on project 'XXX' java.lang.NullPointerException ฉันใช้ Eclipse บน Mac พร้อมกับโครงการสร้าง Android เป้าหมาย 4.0.3 (API ระดับ 15) และฉันติดตั้งเวอร์ชันต่อไปนี้แล้ว คราส - 3.7.2 เครื่องมือพัฒนา Android - 21.0.1 Android SDK - สูงสุด …

2
เหตุใด Double.parseDouble (null) และ Integer.parseInt (null) จึงมีข้อยกเว้นที่แตกต่างกัน
เหตุใด Double.parseDouble (null) และ Integer.parseInt (null) จึงมีข้อยกเว้นที่แตกต่างกัน นี่เป็นอุบัติเหตุทางประวัติศาสตร์หรือโดยเจตนา? เอกสารนี้ระบุข้อยกเว้นสองประเภทอย่างชัดเจนและอีกประเภทDouble.parseDouble(...)หนึ่งสำหรับInteger.parseInt()แต่ดูเหมือนว่าไม่สอดคล้องกัน: Integer.parseInt(null); // throws java.lang.NumberFormatException: null อย่างไรก็ตาม Double.parseDouble(null); // throws java.lang.NullPointerException

7
เหตุใดจึงไม่โยน NullPointerException
คำชี้แจงสำหรับรหัสต่อไปนี้: StringBuilder sample = new StringBuilder(); StringBuilder referToSample = sample; referToSample.append("B"); System.out.println(sample); สิ่งนี้จะพิมพ์Bเพื่อพิสูจน์sampleและreferToSampleวัตถุอ้างถึงการอ้างอิงหน่วยความจำเดียวกัน StringBuilder sample = new StringBuilder(); StringBuilder referToSample = sample; sample.append("A"); referToSample.append("B"); System.out.println(referToSample); นี่จะเป็นการพิมพ์ABที่พิสูจน์ได้เช่นเดียวกัน StringBuilder sample = new StringBuilder(); StringBuilder referToSample = sample; referToSample = null; referToSample.append("A"); System.out.println(sample); เห็นได้ชัดว่าสิ่งนี้จะNullPointerExceptionเกิดขึ้นเพราะฉันพยายามเรียกappendใช้การอ้างอิงที่เป็นโมฆะ StringBuilder sample = new StringBuilder(); StringBuilder referToSample = sample; …

5
java.lang.NullPointerException: ไม่มีมุมมองที่ต้องการพร้อม ID:
Android Studio 3.6 ในแอพ / build.gradle: android { viewBinding.enabled = true ที่นี่ xml ของฉัน: <?xml version="1.0" encoding="utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent"> <androidx.constraintlayout.widget.ConstraintLayout android:id="@+id/bluetoothBottonMainContainer" android:layout_width="0dp" android:layout_height="104dp" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent"> <View android:id="@+id/viewPointNotSelect" android:layout_width="16dp" android:layout_height="16dp" android:background="@drawable/circle_transparent" app:layout_constraintBottom_toBottomOf="@+id/separator" app:layout_constraintEnd_toStartOf="@+id/separator" app:layout_constraintTop_toTopOf="parent" /> และ xml อันอื่นที่ไม่ได้แยกออกก่อนหน้านี้ XML: <androidx.constraintlayout.widget.ConstraintLayout android:id="@+id/bottonContainer" android:layout_width="0dp" android:layout_height="104dp" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent"> …

1
พฤติกรรมที่ประกอบไปด้วยสามแปลกของ Java เมื่อกำหนดค่า Java กำลังทำอะไรอยู่เบื้องหลังเพื่อให้สิ่งนี้เกิดขึ้น?
ไม่กี่วันที่ผ่านมาฉันพบกับสถานการณ์ที่น่าสนใจที่ฉันไม่สามารถหาเอกสารใด ๆ เกี่ยวกับว่า Java ให้เหตุผลต่อไปนี้ได้หรือไม่ (ตัวอย่างข้อมูลนี้เป็นเพียงรูปแบบของข้อบกพร่อง) @Test public void test() { boolean bool = false; Integer intVal = Integer.valueOf(5); Long longVal = null; Long result = bool ? intVal : longVal; System.out.println(" > " + result); } ในตัวอย่างด้านบน: ถ้า bool = true คุณจะได้ค่า '5' แต่ถ้า bool = false คุณจะได้รับข้อยกเว้นตัวชี้ null …
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.