Код: Выделить всё
import java.util.*;
import java.util.stream.Collectors;
public class Main {
record Foo(String id, List bars) {}
record Bar(String id) {}
public static void main(String[] args) {
Map barsByFooIdAndBarId = Collections.emptyList()
.stream()
.collect(
Collectors.toMap(
Foo::id,
foo ->
Collections.emptyMap()
.entrySet()
.stream()
.collect(
Collectors.toMap(
Map.Entry::getKey,
entry ->
foo
.bars()
.get(0)
)
)
)
);
Bar bar = barsByFooIdAndBarId
.computeIfAbsent("fooId", id -> Collections.emptyMap())
.get("barId");
System.out.println(bar);
}
}
Хотя это прекрасно работает с javac и IntelliJ, с расширением VS Code «Языковая поддержка Java(TM) от Red Hat» v1.31.0 это не работает. В этом случае предполагаемым типом является Map. В результате назначение Bar bar не проверяется, поскольку Object не может быть назначен Bar.
Я знаю, что это расширение Java на основе языкового сервера Java Eclipse, но мне пока не удалось напрямую взаимодействовать с языковым сервером. Эта проблема может быть связана с языковым сервером, но я не совсем уверен. Есть идеи?
Подробнее здесь: https://stackoverflow.com/questions/786 ... va-program
Мобильная версия