Tôi có đoạn mã sau:Tôi có thể khởi tạo một lớp ẩn danh trong hàm tạo của lớp ngoài không?
public class Outer {
public Interface Anony {
public void callback();
}
public Outer() {
OtherClass.foo(new Anony() {
@Override
public void callback() {
....
}
});
}
}
Nhưng người bạn của tôi nói với tôi rằng có một số vấn đề trong đó. Tôi đã tạo một cá thể lớp ẩn danh trong hàm tạo của Bên ngoài, vì vậy cá thể lớp ẩn danh ngầm tham chiếu đến cá thể lớp bên ngoài, tức là Outer.this. Nhưng tại thời điểm này, thể hiện lớp bên ngoài chưa được tạo ra đầy đủ. Vì vậy, cá thể lớp ẩn danh tham chiếu một đối tượng với trạng thái không đầy đủ, do đó vấn đề.
Anh ấy có đúng không? Cảm ơn.
Anony là một Giao diện, không phải lớp học! – zEro
có, nhưng Anony mới() {...} đã tạo một cá thể lớp ẩn danh. Đúng. – Kai
@zEro Vâng, 'Anony' là giao diện, nhưng đó là cú pháp để tạo các cá thể lớp ẩn danh thực hiện giao diện. Cú pháp tương tự được sử dụng khi khởi tạo các cá thể của các lớp ẩn danh mở rộng một lớp khác. – jpmc26