Почему вывод типа Java так слаб?

Скажем, у меня есть метод:

public static  Collection addToCollection(T element, Collection collection) {
    collection.add(element);
    return collection;
}

И затем при попытке скомпилировать этот код:

Integer i = 42;
Collection result = addToCollection(i, Collections.emptyList());

Я получаю ошибкуType mismatch: cannot convert from Collection to Collection, Может ли кто-нибудь объяснить, почему система типов не может сделать вывод, что Collections.emptyList () должен иметь тип?Collection

Приведенный выше пример, очевидно, довольно искусственный, но я все время сталкиваюсь с этим ограничением, и оно 'Это действительно раздражает. ПрочитавЭффективная Java Я узнал, что вы можете просто сделатьCollections.emptyList() (Должен сказать, это было для меня откровением в то время), и все собиралось гладко, но если у вас какой-то сложный тип, то это действительно неприятно.

Мне просто интересно, если это какая-то ошибка, или есть веские причины для такой работы?

Ответы на вопрос(3)

Ваш ответ на вопрос