Объясните синтаксис коллекций. опорожнитель()
Я только что изучал общее Программирование,List<E>
интерфейс, и ArrayList
, Так что я могу понять утверждение ниже.
ArrayList<String> list = new ArrayList<String>();
но я не понимаю следующее заявление, которое я видел во время серфинга в интернете.
List<String> list2 = Collections.<String>emptyList();
- что это
Collections
? Почему бы и нетCollections<E>
илиCollections<String>
? - почему
<String>
ставится перед именем методаemptyList
?
(не emptyList<String>()
исправить Общий?)
- что означает это утверждение?
5 ответов:
эта строка создает пустой список строк, вызывая статический метод с параметром универсального типа.
внутри
Collections
класса есть статический методemptyList
объявлен как:public static final <T> List<T> emptyList() { return (List<T>) EMPTY_LIST; }
это имеет общий тип параметра
T
. Мы вызываем вызов этого метода с помощью:List<String> list = Collections.emptyList();
и
T
выводится какString
из-за типаlist
.мы также можем указать тип
T
в угловые скобки при вызовеemptyList
. Это может быть необходимо, если мы хотим более конкретный тип, чем выводится:List<? extends Object> list = Collections.<String>emptyList();
emptyList<String>()
неверно, потому что это размещение допустимо только при создании экземпляры универсальных классов, не вызывающие методы. При использованииnew
возможны два варианта параметры типа, те, что перед именем класса, предназначены только для конструктора, а те, что после имени класса, - для всего экземпляра, поэтому с классом:class MyClass<A> { public <B> MyClass(A a, B b) { System.out.println(a + ", " + b); } }
мы можно вызвать его конструктор, где
A
иString
иB
иInteger
как:MyClass<String> a = new <Integer>MyClass<String>("a", 3);
или с помощью определения типа:
MyClass<String> a = new MyClass<>("a", 3);
Читайте также:
что это
Collections
? Почему бы и нетCollections<E>
илиCollections<String>
?
Collections
- это класс JDK.этот класс состоит исключительно из статических методов, которые работают на или возвращаемая коллекция. Он содержит полиморфные алгоритмы, которые работают на коллекции, "обертки", которые возвращают новую коллекцию при поддержке указанная коллекция и несколько других мелочей.
это не общий и невозможно создать экземпляр.
почему
<String>
ставится перед именем методаemptyList
?
Collections#emptyList
является общим методом. Здесь мы явно указываем аргумент типа,String
.(не
emptyList<String>()
правильно для общего?)нет, в Java аргументы универсального типа для методов стоят перед именем метода.
что означает заявление в смысле?
мы вызываем статический!--5--> метод и присвоить возвращаемое значение переменной типа
List<String>
.
в двух словах, это создает пустой неизменяемый список строк.
давайте посмотрим на выражение по крупицам.
Collections
- это имя класса. Из документация:этот класс состоит исключительно из статических методов, которые работают или возвращают коллекции. Он содержит полиморфные алгоритмы, которые работают с коллекциями, "обертками", которые возвращают новую коллекцию, подкрепленную указанная коллекция и несколько других мелочей.
emptyList()
- имя статического метода, определенного вCollections
класса (документация). Это общий метод, и<String>
наCollections.<String>emptyList()
задает аргумент универсального типа.метод возвращает a
List<T>
, что в данном случаеList<String>
: список строк. Более конкретно, он возвращает пустой,неизменяемые список веревка.
1.Коллекция-это интерфейс, а коллекции-это статический класс, состоящий исключительно из статических методов, которые работают с коллекциями или возвращают их. Поэтому мы не можем использовать
Collections<E>
илиCollections<String>
.2.
<String>
перед emptyList (используется для получения пустого списка, который является неизменяемым) означает, что к нему могут быть добавлены только строковые значения. Например:list2.add("A"); list2.add("B");
3.Оператор означает, что он создаст неизменяемый пустой список типа List.
вы можете проверить эту ссылку: разница между коллекцией Java и коллекциями
во-первых,
Collections
является вспомогательной библиотекой статических методов, которые работают с различными типами коллекций. Если вы занимались каким-либо программированием на C++, это очень синонимично<algorithm>
библиотека функций.в этом случае, вы вызываете статический метод
emptyList()
, который возвращает пустой список определенного типа. Поскольку эти методы все еще требуют типа, ноCollections
' методы могут ссылаться на многие типы, вы должны указать тип при вызове.In чтобы вызвать общий метод, вы должны вызвать его со списком параметров (т. е.
<String>
)до имя метода, но после точка.List<String> someList = Collections.<String>emptyList();