Mein Verständnis über generische war, dass, wenn ich public void saveAll(Collection<? extends Object> stuff) {
dann compile wird die "am häufigsten verwendete Art" des Eingabeparameters zu Collection<Object>
. Jetzt, mit, dass ich unter Code schrieb die generischen Methoden für das Überschreiben, aber ich erhalte folgende Fehlermeldung in der übergeordneten Methode - Name clash: The method saveAll(Collection<? extends Object>) of type ChildWithGenericMethod has the same erasure as saveAll(Collection<Object>) of type ParentWithGenericMethod<T> but does not override it
Typ löschen und überschreiben generische Methode
public class ParentWithGenericMethod {
public void saveAll(Collection<Object> stuff) {
}
}
public class ChildWithGenericMethod extends ParentWithGenericMethod{
public void saveAll(Collection<? extends Object> stuff) {
}
}
Was ich wissen will, ist, dass nach Typ Löschung, wie diese Methoden aussehen würden, wie, ich dachte, sie würden wie public void saveAll(Collection stuff) {
aussehen und daher sollte ich in der Lage sein, zu überschreiben, denn wenn ich Generika nicht verwende, dann kann ich wie folgt überschreiben.
Bitte beachten Sie, dass ich weiß, dass ich den Byte-Code nach der Kompilierung mit "javap" sehen kann, aber es sagt mir nicht, wie diese Methoden nach "type löschung" aussehen würden.
Update:
Diese Frage meiner Frage nicht beantworten, wenn nach Typ Löschung beiden Methoden werden
public void saveAll(Collection stuff) {
warum dann Unterklasse überschreiben Fehler bekommen, denn mit
public void saveAll(Collection<Object> stuff) {
es den zwingenden Regeln geht.
"nach type löschen wie diese methoden aussehen würden" 'öffentliche void saveAll (Collection stuff)' –
Was meinst du mit "am häufigsten Typ"? – user2357112
@AndyTurner Warum bekomme ich dann diesen Fehler, dass es die Methode nicht überschreibt? – pjj