Sprich: Ich habe eine Methode:Warum ist die Typrückschlussart von Java so schwach?
public static <T> Collection<T> addToCollection(T element, Collection<T> collection) {
collection.add(element);
return collection;
}
Und dann, wenn Sie diesen Code zu kompilieren versuchen:
Integer i = 42;
Collection<Integer> result = addToCollection(i, Collections.emptyList());
ich Type mismatch: cannot convert from Collection<Object> to Collection<Integer>
einen Fehler. Könnte jemand erklären, warum das Typsystem nicht folgern kann, dass Collections.emptyList() vom Typ Collection<Integer>
sein sollte?
Das obige Beispiel ist offensichtlich ziemlich künstlich, aber ich stolpere ständig über diese Einschränkung und es ist wirklich nervig. Nachdem ich gelesen habe Effektive Java Ich habe herausgefunden, dass Sie einfach tun Collections.<Integer>emptyList()
(muss sagen, das war eine Offenbarung für mich zu der Zeit) und alles kompilieren reibungslos, aber wenn Sie einige komplizierte Art haben, dann ist es wirklich ein Ärgernis.
Ich frage mich nur, ob dies eine Art von Bug ist, oder gibt es gültige Gründe dafür, dass es so funktioniert?
Können Sie den Titel freundlicherweise umformulieren? – Kobi
Sprechen Sie über den Topf, der den Kessel schwarz nennt. Collections.emptyList() gibt eine nicht änderbare Liste zurück, so dass der Code sowieso nicht funktioniert. – Kayaman
@Kayaman neben dem Punkt, wie OP selbst angezeigt. Die Frage bezieht sich auf die Prinzipien der Schlussfolgerung, Laufzeit spielt nicht eine Rolle. –