Ich baue einen "Kontaktmanager" in Java.Definieren einer generischen Methode für zwei Unterklassen, die dieselbe Schnittstelle implementieren
Ich habe eine übergeordnete Klasse namens "Kontakt, die zwei Basisklassen hat;. PersonalContact und BusinessContact
Ich habe eine Schnittstelle Ereignis genannt, die von Klassen implementiert wird Geburtstag und Meeting. (Birthday enthält ein DateTime-Objekt, während Meeting zwei für die Start- und Endzeit hat.)
PersonalContact hält eine TreeSet von Geburtstage und BusinessContact hält einen Satz von Meetings.
nun in der übergeordneten Klasse Kontakt, ich möchte eine abstrakte Methode namens „getEventsWithinPeriod()“, die eine TreeSet aller Geburtstage und/oder Sitzungen innerhalb einer bestimmten Zeitspanne zurück.
Das Problem ist, ich weiß nicht, wie die abstrakte Methode zu sagen, und dann die Basisklasse Methoden, was zurückgeben.
Zum Beispiel ist dies der Code, den ich in Kontakt;
public abstract Set<Event> getEventsWithinPeriod(DateTime start, DateTime end);
Und in PersonalContact;
public Set<Birthday> getEventsWithinPeriod(DateTime start, DateTime end){
Set<Birthday> birthdaysThatAreWithin = new TreeSet<Birthday>();
//CODE
return birthdaysThatAreWithin;
jedoch im Compiler, erhalte ich einen Fehler auf Set<Birthday>
sagen;
„Der Rückgabetyp ist unvereinbar mit Contact.getEventsWithinPeriod (Datetime, Datetime)“
Was sind die richtigen Begriffe und kehrt ich verwenden sollte? Warum ist mein aktueller Versuch falsch?
Warum möchten Sie nicht weiter 'Event' Schnittstelle verwenden? Die Hauptidee der Schnittstelle, um Code klar zu machen, indem man Liste der sichtbaren Methode für die Implementierung definiert.Verwenden Sie einfach 'TreeSet' –
Ich bin in völliger Übereinstimmung, @ Fess - es scheint nur klar, dass "getEvents ..." Ereignisse zurückgibt, nicht wahr? Der Einsatz von Generika ist in diesem Fall einfach verwirrend und wenig hilfreich. –
Ja, ihr habt recht, ich habe es so gemacht. Ich hatte kein klares Verständnis davon, wie die Schnittstelle dazu verwendet werden könnte, beide Klassen unter dem Banner "Events" als denselben Typ zu vereinen. Danke für Ihre Hilfe! – CodyBugstein