在匿名方法中访问'this'

时间:2010-06-13 22:36:55

标签: java android

我正在尝试在我的Android应用中做一个简单的全局异常处理程序,我遇到了麻烦:

public class TicTacToe extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    Thread.currentThread().setUncaughtExceptionHandler(new UncaughtExceptionHandler() {

        @Override
        public void uncaughtException(Thread thread, Throwable ex) {
            Toast.makeText(this, "TOAST", Toast.LENGTH_LONG);

        }
    });

    setContentView(R.layout.main);
    }
}

我是Android和Java的新手,但在.NET中可行。我不能从java中的匿名方法访问局部变量吗?如果是这样,我该如何重写呢?

谢谢, 维塔利彼得

2 个答案:

答案 0 :(得分:10)

你可以但不是这样。 this被称为UncaughtExceptionHandler对象。

this更改为TicTacToe.this

此外,您应该有编译时错误。不是吗?

答案 1 :(得分:2)

正如另一个答案中所提到的,诀窍是this被遮蔽了。另一种解决方法是在外部类中添加一个返回this的方法。

它意识到这会使类签名略微增加,但如果你保持方法私有,那似乎并不是什么大不了的事。有没有人对如何比其他解决方案更好或更差有评论?

public MyOuterClass {

  private MyOuterClass getThis() {
    return this;
  }

  private void outerClassMethod(new MyAnonymousClass() {
    public void anonymousClassMethod() {
        doSomething(getThis());
    }
  });
}