RSS

No enclosing instance of type Class is accessible

12 Jun

Sáng nay ngồi code chơi gặp tình huống thế này.

public class A {
    public class B{
        private int num;
        public Date() {
            num = 0;
        }
    }

    public static void main(String[] args) {
        B b = new B();
    }
}

Dính ngay lỗi:

No enclosing instance of type A is accessible. Must qualify the allocation with an enclosing instance of type A(e.g. x.new B() where x is an instance of A)

Do lớp B là inner class của lớp A mà khi cần thì không thể truy xuất trực tiếp lớp B. Phải khi báo lớp A rồi hãy  gọi B thông qua A.

Lý giải sâu hơn:

static class B will make your program work.

As it is, you’ve got B as an inner class, which (by definition) is associated with a particular instance of A (even if it never uses or refers to it), which means it’s an error to say new B(); without having a particular A instance in scope.

If you declare it as a static class instead, then it’s a “nested” class, which doesn’t need a particular A instance.

Giải quyết:

Cách 1:
A a = new A();
B b = a.new B();

Cách 2:
thêm từ khóa static lúc khai báo lớp B.

==> Thật là khó để tìm hiểu hết các vấn đề phải không bạn🙂

 
Leave a comment

Posted by on 06/12/2013 in Java

 

Tags: , , , , , , , ,

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

 
%d bloggers like this: