2012-07-17 102 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.*