Может ли ненулевое представление иметь нулевую ссылку для своего контекста в слушателе? - PullRequest
0 голосов
/ 06 февраля 2019

Предположим, что код выглядит следующим образом:

final View someView = ....;  

// some code  
someView.setOnClickListener(v -> {  
    if(someView == null) return;  
    Context context = someView.getContext();  
    // can context be null at this point?
}); 

Возможно ли, чтобы представление имело нулевой Context в каком-то потоке?

1 Ответ

0 голосов
/ 06 февраля 2019

Мое предположение: я думаю, что контекст не может быть нулевым, если View не является нулевым.

Проверяя исходный код View.java, мы можем увидеть:

public class View {

    public View(Context context) {
        mContext = context;
    }

    public final Context getContext() {
        return mContext;
    }
}

Как выможно видеть, mContext инициализируется в конструкторе, и его ссылка не изменяется (mContext ссылка не обновляется). Она всегда указывает на ссылку, полученную в конструкторе.Кроме того, getContext() является окончательным.Таким образом, его нельзя переопределить, гарантируя, что getContext() всегда будет выполнять приведенный выше код.

Если вы попытаетесь создать представление, передающее нулевой указатель (например, View someView = new View(null)), ваше приложение будет аварийно завершено по другим причинам... Итак, mContextgetContext()) не может быть нулевым, если представление не является нулевым.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...