Я немного озадачен в (7) поведении в Java при этом:Кастинг Generic коллекции в качестве параметра функции
Say У меня есть CTOR для Foo
, который принимает Map<String,String>
в качестве параметра. Следующий код:
new Foo(ImmutableMap.of());
Выдает ошибки Ошибка:
java: no suitable constructor found for Foo(com.google.common.collect.ImmutableMap) constructor Foo(java.util.Map) is not applicable
Попытка бросить в Map<String, String>
явно не работает, а также компилятор жалуется, что типы не являются конвертируемыми. Однако это работает очень хорошо:
Map<String, String> map = ImmutableMap.of();
new Foo(map);
Что, черт возьми, происходит здесь? Почему компилятор обрабатывает локальную переменную иначе, чем параметр функции?
Отличный ответ. Мне стало понятно, что конструктор, который может быть вызван, может быть неоднозначным (что, если есть второй ctor, который принимает карту, тогда действительно не может вывести, какой ctor вызвать) –
eladidan