/ / Perché i farmaci generici nelle raccolte java sono così strani? - java, generics, compilatore-costruzione

Perché i farmaci generici nelle raccolte java sono così strani? - java, generics, compilatore-costruzione

Ad esempio, controlla il metodo in java.util.Collections

 public static <T> int binarySearch(List<? extends T> list, T key, Comparator<? super T> c)

Perché posso definirlo in questo modo:

 public static <T> int binarySearch(List<T> list, T key, Comparator<T> c)

Perché questo non funzionerà in java?

risposte:

14 per risposta № 1

tu poteva definiscilo in quel modo, ma non ti permetterebbe di cercare a List<Circle> usare un Comparator<Shape>, per esempio.

Fondamentalmente, la varianza che viene espressa qui consente una maggiore flessibilità pur mantenendo la sicurezza del tipo.


0 per risposta № 2

Per amplificare Jon Skeet"La risposta è un po ', i generici di Java non sono come il C ++modelli. Alcune delle decisioni di progettazione (come la cancellazione del tipo) per i generici, fatte per la compatibilità a ritroso della stessa JVM, portano a una sintassi impacciata e a casi d'uso complicati. Puoi leggere di alcuni di questi qui.