Создание объекта из интерфейса OnClickListener - PullRequest
2 голосов
/ 17 августа 2011

OnClickListener - статический интерфейс, но я создаю его экземпляр из OnClickListener.

Я в замешательстве и мне интересно, что мы можем генерировать объекты из интерфейса в Java?

Почему бы нам не создать конкретный класс, унаследованный от интерфейса OnClickListener? enter image description here

enter image description here

Ответы [ 2 ]

5 голосов
/ 17 августа 2011

Это то, что известно как анонимный внутренний класс .Документация по Swing для Java Standard Edition охватывает это здесь , и я полагаю, что он используется для почти той же цели в разработке Android.Это позволяет вам проще подключать различные интерфейсы обработчиков событий к компонентам, которые запускают эти события.Например, если действие, выполняемое в этом OnClickListener, больше нигде не нужно, вы теперь ограничиваете его единственным классом, в котором оно используется.Вам не нужен другой файл классов в вашем исходном дереве, и немного более очевидно, что происходит в этом конкретном компоненте пользовательского интерфейса.

За кулисами компилятор создает класс с автоматически сгенерированным именем,который действительно реализует OnClickListener.Иногда вы можете увидеть это в трассировке стека с классом com.foo.Class$1.Это $1 - это то, что компилятор генерирует для вашего класса.

1 голос
/ 17 августа 2011

Вы не создаете экземпляр интерфейса. С помощью следующего кода вы напрямую создаете реализацию интерфейса и сохраняете ее в переменной tv_onClick.

private OnClickListener tv_onClick = new OnClickListener() {
   public void onClick(View arg0) { }
}
...