Tôi gặp sự cố sau. Hai loại ẩn danh lồng nhau. Tôi muốn truy cập tham chiếu "này" của lớp ẩn danh bên ngoài bên trong lớp bên trong nhất. Thông thường nếu có một lớp lồng nhau ẩn danh trong một lớp bên ngoài được đặt tên (cho phép gọi nó là "lớp bên ngoài") anh/cô ấy sẽ gõ bên trong lớp lồng nhau Outer.this.someMethod()
. Làm cách nào để tôi tham khảo lớp bên ngoài nếu nó ẩn danh? Ví dụ Code:Cách truy cập tham chiếu "này" của lớp bên ngoài ẩn danh trong java
public interface Outer {
void outerMethod();
}
public interface Inner {
void innerMethod();
}
...
public static void main(String[] args) {
...
new Outer() {
public void outerMethod() {
new Inner() {
public void innerMethod() {
Outer.this.hashCode(); // this does not work
} // innerMethod
}; // Inner
} // outerMethod
}; // Outer
...
} // main
Các lỗi tôi nhận được là
Không dụ kèm theo của các loại Outer có thể truy cập trong phạm vi
Tôi biết rằng tôi có thể sao chép các tài liệu tham khảo như sau:
final Outer outerThisCopy = this;
ngay trước khi khởi tạo Inner
đối tượng và sau đó tham khảo biến này. Mục tiêu thực sự là tôi muốn so sánh hashCodes của outerThisCopy
và đối tượng được truy cập bên trong đối tượng new Inner
(ví dụ: Outer.this
) cho mục đích gỡ lỗi. Tôi có một số đối số tốt để nghĩ rằng hai đối tượng này là khác nhau (trong trường hợp của tôi). [Bối cảnh: Đối số là việc gọi trình thu thập được thực hiện trong lớp "Bên ngoài" không bị che khuất trong lớp "Bên trong" trả về các đối tượng khác nhau]
Bất kỳ ý tưởng nào làm cách nào để truy cập vào tham chiếu "này" của bao vây loại ẩn danh?
Cảm ơn bạn.
Bạn có thể cung cấp phương thức 'int outerHashCode() {return hashCode(); } 'trong lớp bên ngoài ẩn danh của bạn. Trong lớp bên trong của bạn, bạn có quyền truy cập vào phương thức này; chỉ cần gọi nó. Tôi sợ, một cách tiếp cận khác là không thể. – Seelenvirtuose