Đó là quá khó khăn để phát hiện và ngăn cấm tất cả các truy cập vào x
trong quá trình khởi x.Ví dụ:
int x = that().x; | int x = getX();
|
Test that(){ return this; } | int getX(){ return x; }
Đặc điểm dừng tại "truy cập theo tên đơn giản" và không cố gắng toàn diện hơn.
Trong phần khác, "Phân định xác định", thông số kỹ thuật thực hiện điều tương tự. Ví dụ
public class Test
{
static final int y;
static final int z = y; // fail, y is not definitely assigned
static{ y = 1; }
}
public class Test
{
static final int y;
static final int z = Test.y; // pass... because it's not a simple name
static{ y = 1; }
}
Điều thú vị là, "Phân Definite" đặc biệt đề cập đến rằng this.x
tương đương với x
(hoặc, đối với một lĩnh vực, tên đơn giản của trường đủ điều kiện của thành viên này)
khoản này cũng có thể được thêm vào phần được NPE trích dẫn.
- việc sử dụng là thông qua một tên đơn giản (hoặc một tên đơn giản đủ điều kiện của thành viên này)
Nhưng cuối cùng, nó là không thể tại thời gian biên dịch để phân tích tất cả các tập quán tốt/truy cập đến một trường.
Làm thế nào lạ ... (+1) – NPE
Nhắc tôi: trong khi (đúng) {try {return; } cuối cùng {tiếp tục; }} – devconsole