Почему вывод типа не выполняется в этой Java-программе?JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Почему вывод типа не выполняется в этой Java-программе?

Сообщение Anonymous »

Давайте рассмотрим следующую Java-программу:

Код: Выделить всё

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);
}
}
Для нас совершенно не важно, что он делает, нас интересуют только типы. Если вы измените тип barByFooIdAndBarId с Map на var, вам следует использовать вывод типа Java и получить точно такую ​​же программу.
Хотя это прекрасно работает с 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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»