Доступ к этому в анонимных методах - PullRequest
2 голосов
/ 14 июня 2010

Я пытаюсь создать простой глобальный обработчик исключений в своем приложении для 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 ]

10 голосов
/ 14 июня 2010

Вы можете, но не таким образом. this относится к объекту UncaughtExceptionHandler.

Изменить this на TicTacToe.this

Также у вас должна быть ошибка времени компиляции. Это не так?

2 голосов
/ 04 июля 2010

Как уже упоминалось в другом ответе, уловка this затенена.Другой способ обойти это - добавить метод во внешний класс, который возвращает this.

. Он понимает, что это немного портит сигнатуру класса, но если вы оставите метод закрытым, этоне кажется большим делом.У кого-нибудь есть комментарии о том, как это лучше или хуже, чем другие решения?

public MyOuterClass {

  private MyOuterClass getThis() {
    return this;
  }

  private void outerClassMethod(new MyAnonymousClass() {
    public void anonymousClassMethod() {
        doSomething(getThis());
    }
  });
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...