Что означает список В java generics?

Что означает List Означает ли это просто список объектов неуказанного типа?

Googling для строки возвращает ничего полезного (:

Ключевое слово, необходимое для получения дополнительной информации, – это Wildcards

Как сказал Том, , или неограниченный подстановочный знак, означает, что тип объекта не указан. Это может быть неизвестно, может быть рассчитано на несколько возможных значений или может быть просто неуместным. Ваш пример, List , Произносится как «Список неизвестных». Это удобно, потому что это гибко, но есть и некоторые подводные камни, потому что вы не можете засунуть случайные объекты и вытащить их из групп неизвестных с полной безнаказанностью.

Ресурсы:

  • Подстановочные знаки обсуждаются здесь в учебнике по Java.
  • Здесь есть полезный, если подробный – учебник по дженерикам в целом от Angelika Langer.
  • И есть еще один хороший обзор здесь (PDF) Гилада Брача; просмотрите страницы 5-7.
  • Наконец, если вы можете получить эффективную Java от Джоша Блоха, у нее есть отличный раздел о дженериках, а случаи, в которых вы можете, не можете, должны и не должны использовать подстановочные знаки (глава 5, страницы 109-146 в второе издание).

Кстати, ваш поиск Google не удался, потому что Google не вывоз со специальными символами:

За некоторыми исключениями пунктуация игнорируется (т. Е. Вы не можете искать @ # $% ^ & * () = + [] \ и другие специальные символы).

– Страница справки Google

(EDIT: Должно быть, я действительно устал, когда писал это вчера вечером. Убрал форматирование / добавил немного информации.)

Похоже, вы должны найти документацию по Java-дженерикам.

List Означает, что это объект, основанный на неуточненном типе. Эта спецификация создается при создании экземпляра classа.

Например:

 List listOfStrings = new ArrayList(); 

представляет собой список объектов String.

Чтобы ответить на этот вопрос, мне нужно объяснить Unbounded Wildcards и Bounded Wildcards.
Содержимое этого сообщения было собрано из java-документации.

1. Неограниченные подстановочные знаки

Неограниченный тип подстановочного знака задается с использованием символа подстановки ( ? ), Например, List . Это называется списком неизвестного типа. Существует два сценария, в которых неограниченный подстановочный знак является полезным подходом:

  • Если вы пишете метод, который может быть реализован с использованием функций, предоставляемых в classе Object.

  • Когда код использует методы в родовом classе, которые не зависят от параметра типа. Например, List.size или List.clear . На самом деле Class Так часто используется, потому что большинство методов Class не зависят от T

2. Ограниченные подстановочные знаки

Рассмотрим простое приложение рисования, которое может рисовать фигуры, такие как прямоугольники и круги. Чтобы представить эти формы внутри программы, вы можете определить иерархию classов, такую ​​как:

 public abstract class Shape { public abstract void draw(Canvas c); } public class Circle extends Shape { private int x, y, radius; public void draw(Canvas c) { ... } } public class Rectangle extends Shape { private int x, y, width, height; public void draw(Canvas c) { ... } } 

Эти classы можно рисовать на canvasе:

 public class Canvas { public void draw(Shape s) { s.draw(this); } } 

Любой рисунок обычно содержит несколько фигур. Предполагая, что они представлены в виде списка, было бы удобно иметь метод в Canvas, который привлекает их всех:

 public void drawAll(List shapes) { for (Shape s: shapes) { s.draw(this); } } 

Теперь правила типа говорят, что drawAll() может быть вызван только в списках точно Shape: его нельзя, например, вызвать в List . Это печально, так как весь метод выполняет чтение фигур из списка, поэтому его можно было бы также вызвать в List . Нам очень хочется, чтобы метод принял список любой формы: public void drawAll (List forms) {…} Здесь небольшое, но очень важное различие: мы заменили тип List на List List . Теперь drawAll() будет принимать списки любого подclassа Shape , поэтому мы можем теперь называть его в List если хотим.

List List является примером ограниченного шаблона. ? означает неизвестный тип, однако в этом случае мы знаем, что этот неизвестный тип на самом деле является подтипом Shape. (Примечание: это может быть сама форма или какой-то подclass, она не должна буквально расширять форму.) Мы говорим, что Shape является верхней границей шаблона.

Аналогично, синтаксис ? super T ? super T , который является ограниченным подстановочным знаком, обозначает неизвестный тип, который является супертипом T. ArrayedHeap280 ArrayedHeap280 , например, включает ArrayedHeap280 , ArrayedHeap280 и ArrayedHeap280 . Как видно из документации java для classа Integer , Integer является подclassом Number, который, в свою очередь, является подclassом Object.

List – это интерфейс, который вы можете реализовать самостоятельно, а также реализован некоторыми наборами Java, такими как Vector .

Вы можете предоставить информацию о времени компиляции, используя угловые скобки. Наиболее общим типом будет Object , который будет List . Отображаемый Указывает список некоторых подclassов Object или Object . Это похоже на « List List или List List , где List содержит объекты некоторого подclassа Foo или объектов самого Foo .

Вы не можете создать экземпляр List ; это интерфейс, а не реализация.

List Означает List List поэтому в Collection вы найдете containsAll(Collection c) который позволяет вам писать

 List objs = Arrays.asList("one",2,3.14,4); List ints = Arrays.asList(2,4); assert objs.containsAll(ints);//true 

Когда вы берете элемент из коллекции, вы должны отнести его к типу элемента, который хранится в коллекции. Кроме того, что это неудобно, это небезопасно. Компилятор не проверяет, что ваш бросок совпадает с типом коллекции, поэтому при запуске может произойти сбой.

Generics предоставляет вам способ передать тип коллекции компилятору, чтобы он мог быть проверен. После того, как компилятор знает тип элемента коллекции, компилятор может проверить, что вы использовали коллекцию последовательно и можете вставить правильные отбрасывания на значения, извлекаемые из коллекции.

chk dis pdf

Вероятно, вы просматриваете class List на основе шаблона. Вы можете создать список строк с помощью List myList = new MyList(); В качестве примера. Проверьте документацию на все типы, которые она поддерживает. Он должен поддерживать любой тип объекта, но если есть функция сортировки, вы должны предоставить некоторые функции сравнения.

Обратите внимание, что в приведенном выше примере MyList – это конкретный class, который реализует интерфейс List в Java. Это может быть ArrayList .

EDIT: Я принял List как конкретный class по ошибке. Исправлена ​​ошибка выше. Спасибо, Джон.

Давайте будем гением компьютера.