Wracając do problemu ma się on następująco:
mam klasę, którą muszę wypełnić:
public class WardExt extends AbstractWardExt { /* impl */ }
i ona ma w sobie
HashMape <Integer, ArrayList< Patient/PatientExt> > // gdzie Integer to room, a ArrayList to lista pacjentow w tym pokoju
i ta klasa dziedziczy po AbstractWardExt dwie funkcje, które dodają do HashMapy powyżej pacjentów:
patientAdmission(CPatient, int room) { /* tutaj logika ogranicza sie do sprawdzenia czy pacjent juz istnieje w roomStorage czy nie, jesli nie to go dodajemy */
patientAdmission(CPatientExt, int room) { /* jak wyzej */
w skrócie po prostu dodają do room jakiegoś pacjenta, z tym, że CPatientExt ma informacje o chorobie i tym się tylko różni od CPatient.
Każdy pacjent ma unikatowe ID (zmienna static).
@Shalom mógłbym to zrobić jak powyżej podaliście, ale niestety nie mam tak prosto bo mam już szablon, który muszę wypełnić (WardExt)
Stworzyłem HashMape aby to ogarnąć jak najprościej, tylko cały czas mam te problemy z (incompatible type) jak zrobiłem
public class WardExt <T extends Patient> extends AbstractWardExt {
HasMap <Integer, ArrayList< T > > roomStorage = new HashMap< Integer, ArrayList< T > >() ;
patientAdmission(CPatient patient, int room) {
roomStorage.get(room).add(patient); // tutaj sypie errorami
}
}
mógłbym stworzyć dodatkową klasę, która by ogarnęła roomStorage, a w sobie miała dwie różne listy.
Ale wtedy miałbym problem z jeszcze dodatkowymi funkcjami jakie mam do zaimplementowania, gdzie też by się pojawiły problemy z kompatybilnością typów:
patientDischarge(CPatient) // tu tylko bazowa klasa do usuwania pacjentów z roomStorage po ID
oraz getPatients który zwraca zbiór CPatient
Set<CPatient> getPatients()
i getAdmissionHistory który zwraca wszystkich pacjentow jaki kolwiek byli obslugiwani przez patientAdmission()
List<Patient> getAdmissionHistory()
Dlatego kombinuję z różnymi typami dla HashMap aby to zrobić jak najbardziej optymalnie.
Dzięki za pomoc.