Тип подкласса класса с открытым методом - PullRequest
0 голосов
/ 27 ноября 2018

Я не понимаю, почему в определении подкласса используется публичный метод

class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView)

Исходный код RecyclerView.ViewHolder

public abstract static class ViewHolder {


    public ViewHolder(View itemView) {
        if (itemView == null) {
            throw new IllegalArgumentException("itemView may not be null");
        }
        this.itemView = itemView;
    }

1 Ответ

0 голосов
/ 27 ноября 2018

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

class MyClass(itemView: View) : RecyclerView.ViewHolder(itemView)

И то, чего не хватает в вашем описании, показывает внешний класс:

class RecyclerView {                           // outer/containing class
    static class ViewHolder {                  // nested class
         public ViewHolder(ViewItem view) {    // constructor
              // ... constructor body
         }
    }
}

Теперь, глядя на это вложение, чтобы говорить о классе ViewHolder, нужно ссылаться на него как RecyclerView.ViewHolder.Затем, если вы хотите создать экземпляр этого, вы должны добавить параметры конструктора, например, в Java:

new RecyclerView.ViewHolder(view);

В Kotin, когда вы выходите из класса, ваш конструктор должен вызвать супер-конструктор и короткийдля этого нужно сделать это в объявлении.

class MyClass(ViewItem view) : RecyclerView.ViewHolder(view) {
    // ...class body
}

Это говорит о том, что MyClass происходит от ViewHolder, который является вложенным классом RecyclerView, а параметр конструктора, входящий в конструктор MyClass, равенпередается в супер-конструктор ViewHolder.

Это то же самое, что и Java:

class MyClass extends RecyclerView.ViewHolder {
    public MyClass(ViewItem view) {
        super(view);
    }
}

Вы также можете напрямую импортировать вложенный статический класс, а затем удалить префикс RecyclerView, но немного яснее оставить это.

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