"Создание экземпляра" в 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
реализуют этот интерфейс и определяют, как работают различные методы. Что вы пытаетесь выполнить с помощью этого списка? Скорее всего, один из встроенных списков будет работать для вас.