Объясните синтаксис коллекций. опорожнитель()


Я только что изучал общее Программирование,List<E> интерфейс, и ArrayList, Так что я могу понять утверждение ниже.

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

но я не понимаю следующее заявление, которое я видел во время серфинга в интернете.

List<String> list2 = Collections.<String>emptyList();
  1. что это Collections? Почему бы и нет Collections<E> или Collections<String>?
  2. почему <String> ставится перед именем метода emptyList?

(не emptyList<String>() исправить Общий?)

  1. что означает это утверждение?
5 69

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();