Я использую метод, который возвращает тип List<>
, и я тогда в состоянии вызвать методы на этом List
:Почему объявление не требуется?
List<Artist> artists = artistsPager.artists.items;
artists.add(new Artist());
Чтобы быть ясно artistsPager.artists.items
является тип List<Artist>
возвращения.
Поскольку List
только интерфейс, как компилятор позволил мне использовать этот artists
объект, никак не List<>
всегда нуждается в реализации, как ArrayList
?
Например, компилятор не позволит мне сделать следующее, потому что «Список является абстрактным, не может быть реализован»:
List<Integer> list = new List<Integer>();
Как artistsPager.artists.items
чем отличается new List<Integer>()
?
Для любопытных, это исходит от Java Web API wrapper for Android. Вся помощь очень ценится.
Я не верю, что это дубликат этого question, потому что, хотя ответы одинаковы, вопрос, который их порождает, различен. Другой вопрос задает разницу между типами List
и ArrayList
, тогда как мой вопрос задавался вопросом, почему компилятор не жаловался, когда была скрыта реализация List
.
Я в порядке с тем, что это обозначено как дубликат, чтобы направлять будущих пользователей на этот вопрос, но я не думаю, что он должен быть закрыт, так как ответы здесь, я думаю, будут очень полезны для других пользователей.
Вы должны найти интерфейсы/абстрактные классы и посмотреть, как они используются на Java. Это важный набор знаний, особенно при работе с такими высококлассными библиотеками, как Android и JDK, поскольку интерфейсы используются почти везде в них. –
Спасибо @DaveLugg, я был в замешательстве, потому что я просмотрел исходный код Spotify API и не смог найти никакого его создания как ничего, кроме типа List. В следующий раз я буду доверять компилятору! Есть ли какой-нибудь быстрый способ выяснить, где фактически реализован List <>, а не перемещаться по коду? – Richard
Точка использования интерфейсов заключается в том, что вам не важно, где это реализовано, просто это «Список». Тип ArrayList является его реализацией и, вероятно, является наиболее распространенным. Таким образом, вы можете использовать 'List list = new ArrayList ();'. Вы можете найти реализации по умолчанию интерфейса List в документах oracle (https://docs.oracle.com/javase/6/docs/api/java/util/List.html) и посмотреть «Все известные классы реализации» –