Java 访问';这';在匿名方法中

Java 访问';这';在匿名方法中,java,android,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.cu

我正在尝试在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中的匿名方法访问局部变量吗?如果是,我应该如何重写它

谢谢,
维塔利

你可以,但不能那样做<代码>此引用
UncaughtExceptionHandler
对象

this
更改为
TicTacToe。this


您还应该有一个编译时错误。不是吗?

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

它意识到这会稍微破坏类签名,但是如果你保持方法的私有性,那似乎没什么大不了的。有人对这比其他解决方案好还是坏有意见吗

public MyOuterClass {

  private MyOuterClass getThis() {
    return this;
  }

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

你好你说得对。我确实有一个编译错误,很抱歉没有发布它。不管怎样,这似乎有帮助。谢谢。更详细地说,当你这么做的时候,你实际上是在组建一个新的班级。它有一个.class文件(或者我猜是Dalvik的等效文件)和所有东西。所以“this”就是这个类的实例。谷歌“匿名内部类”获取更多信息。如果有合适的方式,为什么会有人使用这种模糊的方式?