2010-06-13 73 views
2

我试图做一个简单的全局异常处理程序在我的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中的匿名方法访问局部变量吗?如果是这样,我应该如何重写它?

感谢, 维塔利

回答

10

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

变化thisTicTacToe.this

你也应该有一个编译时错误。它不是?

+0

嗨。你是对的。我确实有一个编译错误,抱歉没有发布它。无论如何,它似乎有帮助。谢谢。 – VitalyB 2010-06-16 11:02:30

+0

稍微详细一点,当你这样做时,你实际上正在形成一个新班级。它有一个.class文件(或者我猜想的Dalvik等价物)和一切。所以“这个”就是这个类的实例。谷歌“匿名内部类”获取更多信息。 – MatrixFrog 2010-07-04 15:42:27

2

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

它意识到这会让班级签名变得有点麻烦,但是如果你保持这个方法是私人的,那似乎不是什么大不了的事情。有没有人评论这比其他解决方案更好还是更差?

public MyOuterClass { 

    private MyOuterClass getThis() { 
    return this; 
    } 

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

为什么有人会使用这种晦涩的方式,当有合适的方式? – unbeli 2010-07-04 16:38:03