Пакет Visual Studio NuGet необходимо обновить для новой версии набора инструментов
У меня просто возникла проблема с подключением libpng с Visual Studio 2013. Проблема в том, что в файле пакета были только библиотеки для Visual Studio 2010 и 2012.
Правильное решение - надеяться, что разработчик выпустит обновленный пакет и затем обновит его, но он работал для меня, взломав дополнительную настройку для VS2013, указав на файлы библиотеки VS2012.
Я отредактировал пакет (в папке packages
внутри каталога решения), найдя packagename\build\native\packagename.targets
и внутри этого файла, скопировав все секции v110
. Я изменил v110
на v120
в полях условий только очень осторожно, чтобы пути с именами файлов были все как v110
. Это просто позволило Visual Studio 2013 подключиться к библиотекам на 2012 год, и в этом случае он работал.
Итак, какой конкретный тип (подкласс) List используется здесь? Есть ли какие-либо гарантии?
blockquote>Если вы посмотрите на документацию
Collectors#toList()
, в нем указано, что - «Нет никаких гарантий для типа, изменчивость, сериализуемость или безопасность потоков в списке «. Если вы хотите, чтобы конкретная реализация была возвращена, вы можете использоватьCollectors#toCollection(Supplier)
.Supplier<List<Shape>> supplier = () -> new LinkedList<Shape>(); List<Shape> blue = shapes.stream() .filter(s -> s.getColor() == BLUE) .collect(Collectors.toCollection(supplier));
И из лямбда вы можете вернуть любую реализацию, которую вы хотите
List<Shape>
.Обновление:
Или вы даже можете использовать ссылку на метод:
List<Shape> blue = shapes.stream() .filter(s -> s.getColor() == BLUE) .collect(Collectors.toCollection(LinkedList::new));
Это не имеет значения, но конкретный тип не является общим, так как все типы не являются универсальными во время выполнения.
Итак, какой конкретный тип (подкласс) List является используется здесь? Есть ли какие-либо гарантии?
blockquote>Я так не думаю, но ArrayList или LinkedList кажутся вероятными.
Перемещение по Netbeans (Ctrl + Click), я приземлился в этом коде. Кажется, он использует ArrayList в качестве поставщика.
public static <T> Collector<T, ?, List<T>> toList() {
return new CollectorImpl<>((Supplier<List<T>>) ArrayList::new, List::add,
(left, right) -> { left.addAll(right); return left; },
CH_ID);
}