Что, почему конструктор super () не принимает те же аргументы, что и родительский конструктор? - PullRequest
0 голосов
/ 15 июня 2019

Я внедряю пользовательские виды переработчика для ответа на экземпляры класса с определенными параметрами.Для этого мне пришлось реализовать VieHolders.Я создал абстрактный ViewHolder, чтобы я мог передать оба макета для раздувания.Тем не менее, когда я наследую от суперкласса и пытаюсь реализовать конструктор в абстрактном классе, он не принимает аргументы, что конкретный класс, и я получаю сообщение о том, что конструктор по умолчанию недоступен из родительского класса.

То, что я ожидаю, чтобы работать:

 private abstract class CrimeHolder extends RecyclerView.ViewHolder{
      public CrimeHolder(View view, ViewGroup parent, Boolean false){
           super(view, parent, false);
      }

И тогда классы, которые выходят из этого, просто сделают это:

 private class RegularCrimeHolder extends CrimeHolder{
      public RegularCrimeHolder(Inflater inflater, ViewGroup parent{
           super(inflater.inflate(R.layout.list_item_crime, parent, false));
      }
 }

Но на самом деле происходит то, что CrimeHolder можетне передать те же аргументы суперконструктору, что и конкретный класс, или я получаю «Не найден конструктор по умолчанию», поэтому CrimeHolder записывается так:

abstract class CrimeHolder extends RecyclerView.ViewHolder {
    private CrimeHolder(View view){
        super(view);
    }


}

Несмотря на то, что этот конструктор у меня былдля написания для CrimeHolder требуется только один аргумент View. Мне все еще нужно передать полные аргументы суперконструктору в RegularCrimeHolder.Почему дочерний класс вызывает супер-конструктор с таким количеством аргументов?

1 Ответ

0 голосов
/ 15 июня 2019

То, что я ожидаю от работы

Конструктор для RecyclerView.ViewHolder принимает один View параметр .Вы пытаетесь передать три параметра.Это не скомпилируется.

И тогда классы, которые выходят из этого, просто сделают это

Ваш конструктор CrimeViewHolder принимает три параметра.Ваш подкласс RegularCrimeHolder пытается передать один параметр.Это не скомпилируется.

Несмотря на то, что тот конструктор, который мне пришлось написать для CrimeHolder, принимает только один аргумент View

Нет, вызов super принимает одинпараметр.Ваш конструктор, который вы объявили, принимает три параметра.

Почему дочерний класс вызывает супер-конструктор с таким количеством аргументов?

Предположительно, вы ввели это.как вы пытались имитировать список параметров для inflate() вызова на LayoutInflater.

Перепишите ваш CrimeHolder как:

private abstract class CrimeHolder extends RecyclerView.ViewHolder{
  public CrimeHolder(View view){
       super(view);
  }

Перепишите ваш RegularCrimeHolder как:

private class RegularCrimeHolder extends CrimeHolder{
      public RegularCrimeHolder(LayoutInflater inflater, ViewGroup parent) {
           super(inflater.inflate(R.layout.list_item_crime, parent, false));
      }
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...