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

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

30
หลีกเลี่ยง! = ข้อความสั่งโมฆะ
ผมใช้จำนวนมากที่จะหลีกเลี่ยงobject != nullNullPointerException มีทางเลือกที่ดีสำหรับสิ่งนี้หรือไม่? ตัวอย่างเช่นฉันมักจะใช้: if (someobject != null) { someobject.doCalc(); } การตรวจสอบนี้สำหรับNullPointerExceptionสำหรับsomeobjectวัตถุในตัวอย่างข้างต้น โปรดทราบว่าคำตอบที่ยอมรับอาจล้าสมัยโปรดดูhttps://stackoverflow.com/a/2386013/12943สำหรับวิธีการล่าสุด


22
ฉันควรใช้คำอธิบายประกอบ @NotNull Java ใด
ฉันต้องการทำให้โค้ดของฉันอ่านง่ายขึ้นรวมถึงใช้เครื่องมือเช่นการตรวจสอบรหัส IDE และ / หรือการวิเคราะห์รหัสแบบคงที่ (FindBugs และ Sonar) เพื่อหลีกเลี่ยง NullPointerExceptions เครื่องมือจำนวนมากดูไม่เข้ากันกับ@NotNull/ @NonNull/ / @Nonnullหมายเหตุประกอบของแต่ละคนและการแสดงรายการทั้งหมดในรหัสของฉันจะอ่านได้แย่มาก คำแนะนำใดที่ 'ดีที่สุด'? นี่คือรายการคำอธิบายประกอบที่เทียบเท่าที่ฉันพบ: javax.validation.constraints.NotNull สร้างขึ้นสำหรับการตรวจสอบความถูกต้องรันไทม์ไม่ใช่การวิเคราะห์แบบคงที่ เอกสาร edu.umd.cs.findbugs.annotations.NonNull ใช้โดยFindBugsวิเคราะห์แบบคงที่และดังนั้นจึง Sonar (ตอนนี้Sonarqube ) เอกสาร javax.annotation.Nonnull สิ่งนี้อาจใช้ได้กับ Findbugs ด้วยเช่นกัน แต่JSR-305ไม่ได้ใช้งาน (ดูเพิ่มเติม: อะไรคือสถานะของ JSR 305? ) แหล่งที่มา org.jetbrains.annotations.NotNull ใช้โดย IntelliJ IDEA IDE สำหรับการวิเคราะห์แบบคงที่ เอกสาร lombok.NonNull ใช้ในการควบคุมการสร้างรหัสในโครงการลอมบอก คำอธิบายประกอบตัวยึดเนื่องจากไม่มีมาตรฐาน แหล่งที่มา , เอกสาร …

18
เหตุใดฟิลด์ @Autowired ของฉันจึงเป็นโมฆะ
หมายเหตุ: นี่มีวัตถุประสงค์เพื่อเป็นคำตอบที่ยอมรับได้สำหรับปัญหาทั่วไป ฉันมี@ServiceคลาสSpring ( MileageFeeCalculator) ที่มี@Autowiredฟิลด์ ( rateService) แต่ฟิลด์นั้นคือnullเมื่อฉันพยายามใช้ บันทึกแสดงให้เห็นว่าทั้งMileageFeeCalculatorถั่วและMileageRateServiceถั่วกำลังถูกสร้างขึ้น แต่ฉันได้รับNullPointerExceptionเมื่อใดก็ตามที่ฉันพยายามที่จะเรียกmileageChargeวิธีการในบริการถั่วของฉัน เหตุใดสปริงจึงไม่ยอมฟิลด์ ชั้นควบคุม: @Controller public class MileageFeeController { @RequestMapping("/mileage/{miles}") @ResponseBody public float mileageFee(@PathVariable int miles) { MileageFeeCalculator calc = new MileageFeeCalculator(); return calc.mileageCharge(miles); } } ระดับบริการ: @Service public class MileageFeeCalculator { @Autowired private MileageRateService rateService; // <--- should be autowired, …

26
IllegalArgumentException หรือ NullPointerException สำหรับพารามิเตอร์ null? [ปิด]
ปิด คำถามนี้เป็นคำถามความคิดเห็นตาม ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้สามารถตอบข้อเท็จจริงและการอ้างอิงได้โดยแก้ไขโพสต์นี้ ปิดให้บริการใน3 ปีที่ผ่านมา ฉันมีวิธีตัวตั้งค่าง่าย ๆ สำหรับคุณสมบัติและnullไม่เหมาะสมกับคุณสมบัตินี้โดยเฉพาะ ฉันมักจะถูกฉีกขาดในสถานการณ์นี้: ฉันควรจะโยนIllegalArgumentExceptionหรือNullPointerException? จาก javadocs ทั้งคู่ดูเหมือนจะเหมาะสม มีมาตรฐานที่เข้าใจบ้างไหม? หรือนี่เป็นเพียงหนึ่งในสิ่งที่คุณควรทำในสิ่งที่คุณต้องการและทั้งสองอย่างนั้นถูกต้องจริงเหรอ?

10
NullPointerException ใน Java ที่ไม่มี StackTrace
ฉันเคยมีอินสแตนซ์ของรหัส Java ของเราจับได้NullPointerExceptionแต่เมื่อฉันพยายามเข้าสู่ StackTrace (ซึ่งโดยทั่วไปแล้วจะเป็นการโทรThrowable.printStackTrace() ) สิ่งที่ฉันได้รับคือ: java.lang.NullPointerException มีคนอื่นเจอเรื่องนี้ไหม? ฉันลอง googling สำหรับ "java null pointer empty stack trace" แต่ก็ไม่เจออะไรแบบนี้

12
Java 8 NullPointerException ใน Collector.toMap
Java 8 จะส่งCollectors.toMapa NullPointerExceptionหากค่าใดค่าหนึ่งเป็น 'null' ฉันไม่เข้าใจพฤติกรรมนี้แผนที่สามารถมีพอยน์เตอร์พอยน์เตอร์เป็นค่าโดยไม่มีปัญหาใด ๆ มีเหตุผลที่ดีหรือไม่ที่ค่าต่างๆจะไม่เป็นค่าว่างCollectors.toMap? นอกจากนี้ยังมีวิธีที่ดีของ Java 8 ในการแก้ไขปัญหานี้หรือฉันควรเปลี่ยนกลับเป็น old old for loop หรือไม่? ตัวอย่างของปัญหาของฉัน: import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.stream.Collectors; class Answer { private int id; private Boolean answer; Answer() { } Answer(int id, Boolean answer) { this.id = id; this.answer = answer; } …

4
เหตุใดจึงต้องใช้ตัวเลือกมากกว่าตัวเลือก
เมื่อใช้OptionalคลาสJava 8 มีสองวิธีในการห่อค่าในตัวเลือก String foobar = <value or null>; Optional.of(foobar); // May throw NullPointerException Optional.ofNullable(foobar); // Safe from NullPointerException ฉันเข้าใจว่าOptional.ofNullableเป็นวิธีเดียวที่ปลอดภัยในการใช้Optionalแต่ทำไมถึงOptional.ofมีอยู่จริง? ทำไมไม่ใช้เพียงOptional.ofNullable และอยู่ข้างปลอดภัยตลอดเวลา?


11
คำอธิบายที่ดีที่สุดสำหรับภาษาที่ไม่มีค่า null
บ่อยครั้งเมื่อโปรแกรมเมอร์กำลังบ่นเกี่ยวกับข้อผิดพลาด / ข้อยกเว้นของโมฆะบางคนถามว่าเราทำอะไรโดยไม่มีโมฆะ ฉันมีความคิดพื้นฐานเกี่ยวกับความเท่ของตัวเลือกประเภทต่าง ๆ แต่ฉันไม่มีความรู้หรือทักษะทางภาษาที่จะแสดงได้ดีที่สุด อะไรคือคำอธิบายที่ยอดเยี่ยมของสิ่งต่อไปนี้ที่เขียนในวิธีที่เข้าถึงโปรแกรมเมอร์โดยเฉลี่ยที่เราสามารถชี้ให้บุคคลนั้นเห็นได้ ความไม่พึงประสงค์ของการมีการอ้างอิง / พอยน์เตอร์จะเป็นโมฆะโดยค่าเริ่มต้น ประเภทตัวเลือกทำงานอย่างไรรวมถึงกลยุทธ์ในการตรวจสอบกรณีว่างเช่น การจับคู่รูปแบบและ ความเข้าใจแบบ monadic ทางเลือกอื่น ๆ เช่นการกินข้อความไม่มี (ด้านอื่น ๆ ที่ฉันพลาด)

10
ทำไมหนึ่งควรใช้ Objects.requireNonNull ()
ผมได้ตั้งข้อสังเกตว่าหลาย Java 8 วิธีใน Oracle JDK การใช้งานObjects.requireNonNull()ซึ่งภายในพ่นNullPointerExceptionถ้าวัตถุที่กำหนด (อาร์กิวเมนต์) nullเป็น public static <T> T requireNonNull(T obj) { if (obj == null) throw new NullPointerException(); return obj; } แต่NullPointerExceptionจะถูกโยนทิ้งหากnullวัตถุถูกยกเลิกการลงทะเบียน ดังนั้นทำไมหนึ่งควรทำนี้ตรวจสอบโมฆะพิเศษและโยน NullPointerException? หนึ่งคำตอบที่ชัดเจน (หรือประโยชน์) คือมันทำให้โค้ดอ่านง่ายขึ้นและฉันเห็นด้วย ฉันกระตือรือร้นที่จะทราบเหตุผลอื่น ๆ ที่ใช้ Objects.requireNonNull()ในการเริ่มต้นของวิธีการ

12
NullPointerException คืออะไรและฉันจะแก้ไขได้อย่างไร
คำตอบของคำถามนี้เป็นความพยายามของชุมชน แก้ไขคำตอบที่มีอยู่เพื่อปรับปรุงโพสต์นี้ ขณะนี้ไม่ยอมรับคำตอบหรือการโต้ตอบใหม่ Наэтотвопросестьответына กองมากเกินнарусском : Чтотакое Null ชี้ข้อยกเว้นикакегоисправить? ข้อยกเว้นตัวชี้ Null ( java.lang.NullPointerException) คืออะไรและทำให้เกิดอะไร วิธีการ / เครื่องมือใดบ้างที่สามารถใช้เพื่อระบุสาเหตุเพื่อให้คุณหยุดข้อยกเว้นจากสาเหตุที่ทำให้โปรแกรมหยุดการทำงานก่อนเวลาอันควร

8
Android - วิธีแทนที่ปุ่ม“ ย้อนกลับ” ดังนั้นมันจึงไม่เสร็จสิ้น () กิจกรรมของฉัน
ขณะนี้ฉันมีกิจกรรมที่เมื่อมันได้รับการแสดงการแจ้งเตือนจะได้รับการแสดงในแถบการแจ้งเตือน นี่คือเพื่อที่เมื่อผู้ใช้กดที่บ้านและกิจกรรมที่ถูกผลักไปที่พื้นหลังพวกเขาสามารถกลับไปที่กิจกรรมผ่านการแจ้งเตือน ปัญหาเกิดขึ้นเมื่อผู้ใช้กดปุ่มย้อนกลับกิจกรรมของฉันถูกทำลาย แต่การแจ้งเตือนยังคงอยู่เนื่องจากฉันต้องการให้ผู้ใช้สามารถกดย้อนกลับ แต่ยังสามารถเข้าถึงกิจกรรมผ่านการแจ้งเตือนได้ แต่เมื่อ USER ลองสิ่งนี้ฉันจะได้รับ Null Pointers เนื่องจากเป็นการพยายามเริ่มกิจกรรมใหม่แทนที่จะนำสิ่งเก่ากลับมา โดยพื้นฐานแล้วฉันต้องการให้ปุ่มย้อนกลับทำหน้าที่เหมือนกับปุ่มโฮมและนี่คือสิ่งที่ฉันได้ลองมาแล้ว: @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (Integer.parseInt(android.os.Build.VERSION.SDK) < 5 && keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) { Log.d("CDA", "onKeyDown Called"); onBackPressed(); } return super.onKeyDown(keyCode, event); } public void onBackPressed() { Log.d("CDA", "onBackPressed Called"); Intent …

8
Android Fragment getActivity () บางครั้งส่งคืนค่าว่าง
ในรายงานข้อผิดพลาดคอนโซลนักพัฒนาซอฟต์แวร์บางครั้งฉันเห็นรายงานที่มีปัญหา NPE ฉันไม่เข้าใจสิ่งที่ผิดปกติกับรหัสของฉัน ในอีมูเลเตอร์และแอปพลิเคชันอุปกรณ์ของฉันทำงานได้ดีโดยไม่ต้องใช้แรงกดอย่างไรก็ตามผู้ใช้บางคนได้รับ NullPointerException ในคลาสแฟรกเมนต์เมื่อเรียกเมธอด getActivity () กิจกรรม pulic class MyActivity extends FragmentActivity{ private ViewPager pager; private TitlePageIndicator indicator; private TabsAdapter adapter; @Override public void onCreate(Bundle savedInstanceState) { pager = (ViewPager) findViewById(R.id.pager); indicator = (TitlePageIndicator) findViewById(R.id.indicator); adapter = new TabsAdapter(getSupportFragmentManager(), false); adapter.addFragment(new FirstFragment()); adapter.addFragment(new SecondFragment()); indicator.notifyDataSetChanged(); adapter.notifyDataSetChanged(); // push …

8
ส่งคืน null เป็น int ที่ได้รับอนุญาตกับผู้ประกอบการที่ประกอบไปด้วยสามส่วน แต่ไม่ใช่ถ้ามีคำสั่ง
ลองดูโค้ด Java อย่างง่ายในตัวอย่างต่อไปนี้: public class Main { private int temp() { return true ? null : 0; // No compiler error - the compiler allows a return value of null // in a method signature that returns an int. } private int same() { if (true) { return null; // …

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.