В Java, как я могу ссылаться на анонимный внутренний класс изнутри себя? - PullRequest
4 голосов
/ 24 января 2011

Я определяю обратный вызов и хотел бы сослаться на обратный вызов внутри себя.Компилятору это не нравится и он утверждает, что переменная, ссылающаяся на обратный вызов, не инициализирована.Вот код:

final Runnable callback = new Runnable() {
    public void run() {
        if (someCondition()) {
            doStuffWith(callback); // <<--- compiler says "the local variable callback may not be initialized"
        }
    }
};
// Here callback is defined, and is certainly defined later after I actually do something with callback!

Очевидно, что компилятор ошибается, так как к тому времени, когда мы достигаем внутренний обратный вызов метода, определен.Как мне сказать компилятору, что этот код в порядке, или как я могу написать его по-другому, чтобы успокоить компилятор?Я не сделал много Java, поэтому я мог бы не туда лаять.Есть ли другой идиоматический способ сделать это?Мне это кажется довольно простой конструкцией.

edit: Конечно, это было слишком легко.Спасибо за все быстрые ответы!

Ответы [ 4 ]

11 голосов
/ 24 января 2011

Почему бы не использовать:

doStuffWith(this);
3 голосов
/ 24 января 2011

Я могу ошибаться, но я думаю, что вы хотите заменить doStuffWith(callback); на doStuffWith(this);.

http://download.oracle.com/javase/tutorial/java/javaOO/thiskey.html

1 голос
/ 24 января 2011

Вы можете использовать this вместо callback

(только что попробовал, мой компилятор действительно жалуется на ваш путь, но если вы используете this, он не:

final Runnable callback = new Runnable() {
    public void run() {
        if (something()) {
            doStuffWith(this);
        }
    }
};
1 голос
/ 24 января 2011

Вы пробовали использовать ключевое слово this?

...