次の2つのコードサンプルは同じロジックを表します。文字列がnullで、そのチェックに基づいて分岐するかどうかを確認します。最初のサンプルは安全にコンパイルされます。 2つめは、Javaジェネリックスに関連する型の不一致エラーを生成します。私の質問は十分に単純だと思われますが、それは私には分かりません。なぜコンパイラはこれら2つのステートメントを別々に扱いますか?ここで何が起こっているのか、どうすればわかりますか?なぜこれらの2つの条件はコンパイラによって異なって扱われますか?
/* 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);
}
securityService.getRolesForUser()の署名を投稿できますか? –
が追加されました。インタフェースにはもう1つのメソッドがありますが、この例では呼び出されません。 –