public List<String> foo1() {
List<String> retval = bar();
if (retval == null)
return Collections.emptyList();
else
return retval;
}
public List<String> foo2() {
List<String> retval = bar();
return retval == null ? Collections.emptyList() : retval;
}
Почему foo1()
компилируется в то время как foo2()
имеет ошибку? (точнее "несоответствие типов": невозможно преобразовать из List < capture # 1-of? extends Object > to List <String> ")
Я бы подумал, что обе функции будут компилироваться в один и тот же байт-код, поэтому умный компилятор должен вывести правильный тип для emptyList()
...