เข้าถึง“ this” จาก Java anonymous class


143

รับรหัสต่อไปนี้:

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.
      }
    };
  }
}

ฉันต้องการเข้าถึงContainer.select()จากภายในselect()วิธีการเรียนที่ไม่ระบุชื่อ อย่างไรก็ตามthis.select()จะเรียกselect()วิธีการของคลาสที่ไม่ระบุชื่ออีกครั้ง

ข้อเสนอแนะของฉันจะเป็น:

แนะนำเขตข้อมูลลงในคอนเทนเนอร์เช่น

private Container self = this;

ตอนนี้ฉันสามารถเข้าถึงได้Container.select()โดยโทรself.select()จากภายในชั้นที่ไม่ระบุชื่อ

นี่เป็นวิธีที่สมเหตุสมผลหรือไม่ หรือมีวิธีใดที่ดีกว่า

คำตอบ:


268
Container.this.select();

3
ฉันไม่ทราบว่าthisคำหลักจะแตกต่างกันเพียงวิธีและคุณลักษณะ +1
logo_writer

ควรสังเกตว่าคุณต้องระบุContainerคลาสที่แน่นอนที่นี่ บรรพบุรุษของมันจะไม่ได้รับการยอมรับ
velis

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.