2012-07-17 108 views
3

對象比方說,我們有一些Foo類,它包含訪問從聽衆

public void setOnSomethingListener(OnSomethingListener listener); 

我們用它註冊:

Foo foo = new Foo(); 
foo.setOnSomethingListener(new OnSomethingListener(){ 
    public void onSomething(String data) { 
    // ... 
    } 
}); 

是否有可能從已註冊提及onSomething方法的家長對象訪問監聽器沒有訪問定義的foo值?

我問了一下,因爲我想給這個監聽器分配一些參數並將它註冊到少數幾個對象中。

回答

7

是。

你在這裏做的是定義一個匿名內部類。您可以通過執行來訪問包含類的屬性和方法。

MyContainingClass.this.attributeName 
+2

AKA [合格'this'](http://docs.oracle.com/javase/specs/jls/se7/html/jls-15.html#jls-15.8.4) – user1329572 2012-07-17 12:45:13

+1

那麼如果用過的監聽器不在'MyContainingClass'裏面?例如 - 註冊偵聽器的對象是「EditText」類型,偵聽器是「View.OnFocusChangeListener」。我得到了警告:'android.widget.EditText不是一個封閉的類'。 – hsz 2012-07-17 12:53:04

0

嘗試

OnSomethingListener.this.*