Một số mẹo nhỏ tránh NullPointerException

NullPointerException là một RuntimeException xảy ra khi chúng tham chiếu đến các phần tử bên trong object đang trỏ về null như là: 

  • Gọi method từ object null.
  • Truy cập hoặc sửa đổi giá trị của một field bên trong object null.
  • Lấy độ dài của mảng null.
  • etc. 

Tạo sao cần giá trị null trong java

null là một giá trị đặc biệt trong java chỉ ra rằng cho có một giá trị nào được gán cho một biến cụ thể. Hoặc khi cần khai báo một biến và sử dụng cho toàn bộ class hoặc Singleton pattern đảm bảo rằng chỉ có một instance được cung cấp ra bên ngoài ban đầu chúng ta nên khởi tạo là null để đánh dấu rằng nó chưa được gán cho giá trị nào.

import java.util.UUID;
import java.io.*;

class Singleton {
    // Initializing values of single and ID to null.
    private static Singleton single = null;
    private String ID = null;

    private Singleton() {
        /* Make it private, in order to prevent the
           creation of new instances of the Singleton
           class. */

        // Create a random ID
        ID = UUID.randomUUID().toString();
    }

    public static Singleton getInstance() {
        if (single == null)
            single = new Singleton();
        return single;
    }

    public String getID() {
        return this.ID;
    }
}

class TestSingleton {
    public static void main(String[] args) {
        Singleton s = Singleton.getInstance();
        System.out.println(s.getID());
    }
}

Output:
cfa97530-ca5a-4910-867e-0a9048fbd923

Một số mẹo tránh lỗi NullPointerException

NullPointerException là một trong những lỗi kinh điểm mà những người mới học thường hay gặp phải do không kiểm tra điều kiện dữ liệu đầu vào đầy đủ. 

Dưới đây là một số kinh nghiệm để tránh NullPointerException. 

1, So sánh bằng object với hằng số luôn đặt hằng số phía bên trái equals() method.

Boolean b = null;

Boolean.TRUE.equals(b) => false

b.equals(Boolean.TRUE) => NullPointerException

1, So sánh bằng enum với luôn đặt hằng số phía bên trái equals() method.

enum MyEnum {
    A,
    B,
    C
}

class Main {
    public static void main(String[] args) {
        MyEnum e = null;
        System.out.println(MyEnum.A.equals(e)); => false

        System.out.println(e.equals(MyEnum.A)); => NullPointerException
    }
}

3, luôn kiểm tra dữ liệu khác null trước khi thao tác

public static int sum(Integer a, Integer b) {
        if (a == null && b == null) 
            return 0;
        else if (a == null && b != null )
            return b;
        else if (a != null && b == null)
            return a;
        else 
            return a + b;
}

Lời kết

NullPointerException là một trong những lỗi kinh điển và cũng rất dễ để sữa lỗi bằng cách áp dụng các quy tắc trên. Trong thực tế không phải trường hợp nào bạn cũng cứ đi kiểm tra khác null đâu nhé. Làm như vậy là máy móc lắm, chúng ta phải cần xác định xem object đó có thể null hayu không đã rồi hẳn kiểm tra nhé, 

0 0 votes
Article Rating
Subscribe
Notify of
guest
0 Comments
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x