Ho una classe piuttosto centrale responsabile per alcuni metodi di utilità. Ho voluto fornire un sovraccarico aggiuntivo per un metodo che è stato dichiarato come segue:Cancellazione di generici di raccolte e sovraccarichi in conflitto
public static void removeDuplicated(Collection fullList, Collection itemsToRemove) {
//implementation stripped for brevity
}
Ora, poiché non mi piace molto Rawtypes, ho specificato le collezioni fuori nel minimo comune denominatore posso aspettarmi:
public static void removeDuplicated(Collection<Map<?,?>> fullList,
Collection<Map<?,?>> itemsToRemove) {}
Fin qui tutto bene, questo ha eliminato l'avviso rawtype e tutto è andato bene fino ad ora.
ho provveduto a scrivere l'intestazione di metodo per il mio sovraccarico:
public static <T extends TeObjectWrapper> void removeDuplicated(
Collection<T> fullList, Collection<Map<?,?>> itemsToRemove) {}
Questo è quando eclisse (e successivamente la compilazione con javac6 via formica) mi ha dato errore seguente messaggio:
Erasure di metodo
removeDuplicated(Collection<T>, Collection<? extends Map<?,?>>)
è lo stesso di un altro metodo di tipo [Utility-Class]
Ora, poiché ho già avuto la mia parte di pro problemi con i generici di caratteri jolly e le loro cancellature Ho provato a specificare le cose completamente, sostituendo i caratteri jolly non associati con Object
. Il messaggio di errore persiste ancora.
Da quanto ho capito, il primo sovraccarico esistente dovrebbe essere cancellato a Collection<Map<Object, Object>>
e il secondo dovrebbe essere cancellato a Collection<TeObjectWrapper>
.
L'unico modo in cui questi potrebbero essere la stessa cancellazione è se TeObjectWrapper ha implementato Map (o esteso una delle classi di implementazione di Map), ma non è questo il caso. Questo può essere visto nella gerarchia supertipo di TeObjectWrapper:
Perché il compilatore considera le cancellature lo stesso e come posso fargli Non pensate che?
La cancellazione di 'Raccolta' è 'Raccolta'. –
A causa della cancellazione, la firma del metodo è la stessa. Pasticciare con i generici non cambia la firma del metodo. – user489041