"Создание экземпляра" в Java?

Попытка использовать следующий код:

List<Integer> list = new List<Integer>();

Появляется следующее сообщение об ошибке:

java.util.List является абстрактным; не может быть создан

Что это значит и почему я не могу инициализировать List так же, как и ArrayList?

Ответ 1

В Java List - это интерфейс. То есть, он не может быть создан непосредственно.

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

Так как ArrayList является своего рода List, вы можете легко его повысить:

List<T> mylist = new ArrayList<T>();

Это отличается от .NET, где, начиная с версии 2.0, List<T> является реализацией интерфейса IList<T> по умолчанию.

Ответ 2

List - это интерфейс, а не конкретный класс.
Интерфейс - это всего лишь набор функций, которые может реализовать класс; нет смысла создавать интерфейс.

ArrayList - это конкретный класс, который реализует этот интерфейс и все его методы.

Ответ 3

Используйте List<Integer> list = new ArrayList<Integer>();

Ответ 4

List - это интерфейс, а не класс, поэтому он не может быть создан. ArrayList наиболее вероятно, что вы после:

ArrayList<Integer> list = new ArrayList<Integer>();

Интерфейс в Java по существу определяет план для класса - класс, реализующий интерфейс, должен обеспечивать реализацию методов, которые определяет список. Но фактическая реализация полностью соответствует классу-реализации, ArrayList в этом случае.

JDK также предоставляет LinkedList - альтернативную реализацию, которая снова соответствует интерфейсу списка. Он работает по-разному с ArrayList под ним и, как таковой, имеет тенденцию быть более эффективным при добавлении/удалении элементов наполовину через список, но для подавляющего большинства случаев использования он менее эффективен. И, конечно, если вы хотите определить свою собственную реализацию, это вполне возможно!

Короче говоря, вы не можете создать список, потому что это интерфейс, не содержащий конкретного кода, - что работа классов, которые реализуют этот список, из которых ArrayList наиболее часто используется (и не без оснований! )

Также стоит отметить, что в С# a List есть класс, а не интерфейс - это IList. Тот же принцип применяется, хотя и с разными именами.

Ответ 5

A List не является реальностью в Java. Это интерфейс, способ определения того, как объекту разрешено взаимодействовать с другими объектами. Таким образом, он никогда не может быть создан. ArrayList представляет собой реализацию интерфейса List, как и связанный список и т.д. Используйте их вместо этого.

Ответ 6

A List в java - это интерфейс, который определяет определенные качества, которые должен иметь "список". Конкретные реализации списков, такие как ArrayList реализуют этот интерфейс и определяют, как работают различные методы. Что вы пытаетесь выполнить с помощью этого списка? Скорее всего, один из встроенных списков будет работать для вас.