Truy cập vào mạng này từ lớp ẩn danh Java


143

Cho mã sau:

public interface Selectable {
  public void select();
}

public class Container implements Selectable {
  public void select() {
  ...
  }
  public void createAnonymousClass() {
    Selectable s = new Selectable() {
      public void select() {
        //see comment below.
      }
    };
  }
}

Tôi muốn truy cập Container.select()từ trong select()phương thức của lớp ẩn danh của mình . Tuy nhiên, this.select()một lần nữa sẽ gọi select()phương thức của lớp ẩn danh .

Đề nghị của tôi sẽ là:

Giới thiệu một lĩnh vực vào Container, ví dụ

private Container self = this;

Bây giờ tôi có thể truy cập Container.select()bằng cách gọi self.select()từ trong lớp ẩn danh.

Đây có phải là một cách hợp lý? Hoặc có cách nào tốt hơn?

Câu trả lời:


268
Container.this.select();

3
Tôi thậm chí không biết thiscác từ khóa có thể được phân biệt giống như các phương thức và thuộc tính có thể. +1
logo_writer

Cần lưu ý rằng bạn phải chỉ định Containerlớp Chính xác ở đây. Bất kỳ tổ tiên của nó sẽ không được chấp nhận.
velis

42

Bạn có thể viết Container.this.select()để phân biệt với lớp bên trong!

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.