Почему вывод типа 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()
(Должен сказать, это было для меня откровением в то время), и все собиралось гладко, но если у вас какой-то сложный тип, то это действительно неприятно.
Мне просто интересно, если это какая-то ошибка, или есть веские причины для такой работы?