Bạn đã khai báo lớp Thinglà một lớp bên trong không tĩnh. Điều đó có nghĩa là nó phải được liên kết với một thể hiện của Hellolớp.
Trong mã của bạn, bạn đang cố gắng tạo một phiên bản Thingtừ bối cảnh tĩnh. Đó là những gì trình biên dịch đang phàn nàn về.
Có một vài giải pháp có thể. Giải pháp nào để sử dụng phụ thuộc vào những gì bạn muốn đạt được.
Di chuyển Thingra khỏi Hellolớp.
Thay đổi Thingthành một staticlớp lồng nhau.
static class Thing
Tạo một thể hiện Hellotrước khi tạo một thể hiện của Thing.
public static void main(String[] args)
{
Hello h = new Hello();
Thing thing1 = h.new Thing(); // hope this syntax is right, typing on the fly :P
}
Giải pháp cuối cùng (một lớp lồng không tĩnh ) sẽ là bắt buộc nếu bất kỳ trường hợp nào Thingphụ thuộc vào một thể Hellohiện có ý nghĩa. Ví dụ: nếu chúng ta có:
public class Hello {
public int enormous;
public Hello(int n) {
enormous = n;
}
public class Thing {
public int size;
public Thing(int m) {
if (m > enormous)
size = enormous;
else
size = m;
}
}
...
}
bất kỳ nỗ lực thô nào để tạo một đối tượng của lớp Thing, như trong:
Thing t = new Thing(31);
sẽ có vấn đề, vì sẽ không có enormousgiá trị rõ ràng để kiểm tra 31 chống lại nó. Một thể hiện hcủa Hellolớp bên ngoài là cần thiết để cung cấp h.enormousgiá trị này :
...
Hello h = new Hello(30);
...
Thing t = h.new Thing(31);
...
Bởi vì nó không có nghĩa là Thingnếu nó không có a Hello.
Để biết thêm thông tin về các lớp lồng nhau / bên trong:
Các lớp lồng nhau (Các hướng dẫn Java)