Nếu bạn chạy đoạn mã sau,Unboxing một đối tượng đóng hộp rỗng ném NullPointerException bất ngờ
public class Foo{
public static void main(String[] args){
int id = new Bar().getId(); // throws unexpected NullPointerException
}
private static class Bar{
private final Integer id;
public Bar(){
this(null);
}
public Bar(Integer id){
this.id = id;
}
public Integer getId(){
return id;
}
}
}
bạn sẽ nhận được stacktrace sau,
Exception in thread "main" java.lang.NullPointerException
at Foo.main(Foo.java:3)
Tại sao không có cảnh báo trình biên dịch hoặc bất cứ điều gì? IMHO đó là một sự tinh tế khá khó chịu với unboxing, hoặc có lẽ tôi chỉ ngây thơ.
Thêm vào câu trả lời cung cấp bởi @Javier, nếu bạn đang sử dụng Eclipse, bạn cần phải làm như sau để kích hoạt tính năng này:
- Navigate to Window>Preferences>Java>Trình biên dịch>Lỗi/cảnh báo
- Mở rộng vấn đề tiềm năng lập trình
- Chuyển đổi Boxing và chuyển đổi unboxing hoặc là "Cảnh báo", hoặc "Lỗi"
- Tap "OK"
Tôi không hiểu. Bạn có hỏi tại sao NPE xảy ra hay đây chỉ là một rant? Câu hỏi có thể trả lời cụ thể là gì? – madth3