И проблема в том, что я не понимаю, почему я могу назначить List, если я передаю методу doSomething необработанный тип (который в моем случае является просто HashMap), похоже, по какой-то причине необработанный тип на входе влияет на необработанный тип на выходе.
Код: Выделить всё
class Someclass{
interface A{
}
static class B implements A{}
static List doSomething(Map param) {
return List.of(new B());
}
public static void test() {
List bs = doSomething(null);
List list = doSomething(new HashMap());//compiles, but with warnings
List list2 = doSomething(new HashMap());//does not compile
}
}
Может кто-нибудь объяснить, это ожидаемое поведение или это ошибка?
Есть ли что-нибудь в спецификации языка Java по этому поводу?Я использую Java 17, кстати. Я не уверен, что эта проблема зависит от поставщика JDK
Это дало мне одинаковый результат на разных машинах, где используются разные поставщики jdk, я не пробовал все из них, я пробовал не более двух разных поставщиков, openjdk 17 ( который по умолчанию находится в репозитории Debian) и принять openjdk.
Подробнее здесь: https://stackoverflow.com/questions/793 ... urn-result