2014-11-06 54 views
0

我wan't在指我的主類中EventHandler塊使用關鍵字this,說:事件處理程序實現爲一個匿名內部類

public class Extra { 

    private SuperObject object; 

    public Extra() { 

     Button.setOnAction(new EventHandler<ActionEvent>() { 
      @Override 
      public void handle(ActionEvent ae) { 

       object = new SuperObject(this); 
      } 
     }); 
    } 
} 

// where... 

public class SuperObject { 

    public SuperObject(Extra e) { 

     // something 
    } 
} 

但在這種情況下,我已經得到了有關的警告我還沒有爲SuperObject類聲明一個構造函數,其中ActionEvent參數。在這種情況下我能做些什麼?

+1

順便說一下,這實際上並不是「反射」。 – 2014-11-06 18:29:12

+0

我因缺乏恰當的詞而受苦。原諒我。 – bluevoxel 2014-11-06 18:31:23

+0

這不是一個大罪行,沒有必要乞求寬恕。 – 2014-11-06 18:32:52

回答

3

this是你的匿名內部EventHandler類。

要訪問外部this,請使用Extra.this

2

你必須做這樣

object = new SuperObject(Extra.this); 
4

由於您使用的Java 8中,除了其他解決方案(一個或多個)上發佈,也可以用一個lambda更換內部類,其中this有其直觀的含義(對周圍物體的引用):

button.setOnAction(ae -> { 
    object = new SuperObject(this); 
});