Возврат экземпляра в Java - PullRequest
0 голосов
/ 13 ноября 2011

Мы не можем создать экземпляр интерфейса.

Но почему Arrays.asList(Object[] a) в Java API возвращает List (List является интерфейсом)?

Спасибо!

Ответы [ 2 ]

3 голосов
/ 13 ноября 2011

Создает экземпляр класса , который реализует интерфейс.

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

2 голосов
/ 13 ноября 2011

Программирование на Java и OOO в целом позволяет вам определить, как должен использоваться объект (это интерфейс объекта), поэтому только разработчик библиотеки должен беспокоиться о мрачных деталях того, как все на самом деле работает. Вот почему рекомендуется никогда не возвращать сам класс, а только интерфейс. В дополнение к улучшению обслуживания он также позволяет использовать объекты-заглушки или заглушки при тестировании кода для ваших приложений.

В частности, Java позволяет создавать реализацию интерфейса на лету. то есть вы можете сделать что-то вроде

return new List() {

   boolean add() {...}
   void addAll {...}
   ... 
}

Это, конечно, излишне для сложных интерфейсов, таких как List, но на самом деле очень удобно для небольших интерфейсов.

...