Назначение ссылки на конструктор: Java 8

98
7

Я проходил документацию по методам в Java8

в котором я столкнулся с таблицей о типах ссылки на метод, из 4 последней

-----------------------------------------------
Reference to a constructor : ClassName::new
-----------------------------------------------

Вы можете ссылаться на конструктор так же, как статический метод, используя имя new.

Я не могу понять, что именно делает ссылка на конструктор?

Примечание. Я знаю, что Java Documentation является самоочевидной, но в этом случае я не понимаю, что именно она хочет передать.

спросил(а) 2021-01-25T17:38:48+03:00 4 месяца, 2 недели назад
1
Решение
89

Ссылка на конструктор может использоваться всякий раз, когда вы вызываете метод, требующий поставщика (т.е. Он имеет параметр, тип которого является Supplier<T>). Конструктор класса T может служить Supplier<T>.

Так, например, рассмотрим этот пример, взятый из класса Javadoc класса Collectors:

Set<String> set = 
people.stream()
.map(Person::getName)
.collect(Collectors.toCollection(TreeSet::new));

Collectors.toCollection требует Supplier. Когда вы передадите ему конструктор TreeSet - TreeSet::new - он будет использовать для создания экземпляра TreeSet который будет содержать элементы Stream. Если вы передадите ему HashSet::new, он создаст экземпляр HashSet вместо TreeSet.

ответил(а) 2021-01-25T17:38:48+03:00 4 месяца, 2 недели назад
45

Он позволяет некоторому универсальному коду создавать объекты типа, для которого вы передаете конструктор.

Итак, если вы передадите SomeClass::new функции f например


f(SomeClass::new)

функция f затем может создавать экземпляры типа SomeClass.

ответил(а) 2021-01-25T17:38:48+03:00 4 месяца, 2 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема