Следующие два примера кода представляют одну и ту же логику.Проверьте, является ли строка нулевой и разветвленной на основе этой проверки.Первый пример компилируется безопасно.Вторая выдает ошибку несоответствия типов, связанную с обобщениями Java.Мой вопрос кажется достаточно простым, но он ускользает от меня.Почему компилятор обрабатывает эти два оператора по-разному?Как я могу лучше понять, что здесь происходит?
/* compiles cleanly */
protected Collection<String> getUserRoles(Object context,
Set<String> mappableRoles) {
String cookieValue = extractCookieValue(context);
if (cookieValue != null) {
return securityService.getRolesForUser(cookieValue);
} else {
return Collections.emptySet();
}
}
/* produces a compiler error */
protected Collection<String> getUserRoles(Object context,
Set<String> mappableRoles) {
String cookieValue = extractCookieValue(context);
return cookieValue == null ? Collections.emptySet()
: securityService.getRolesForUser(cookieValue);
}
Ошибка компилятора из Eclipse.
Type mismatch: cannot convert from Set<capture#1-of ? extends Object> to Collection<String>
По запросу, вот соответствующая часть SecurityServiceинтерфейс.
public interface SecurityService {
public Set<String> getRolesForUser(String userId);
}