Использование abstract помогло с методом getSavedEvents (), так как все дочерние элементы реализуют этот метод.
Вот код для setEvent ():
public class EventTable {
public void setEvent(Event e) {
int x = 0;
int type = e.getEventType();
columns = e.getFields();
Event[] savedEvents = e.getSavedEvents();
for(Event ev : savedEvents) {
tempdata[x][0] = ev.getFormattedDate()[0];
switch(type) {
case EVENTTYPE.WEIGHT:
tempdata[x][1] = ev.getWeight();
tempdata[x][2] = ev.getReps();
break;
case EVENTTYPE.TIMED:
tempdata[x][1] = ev.getTimeInHMS();
break;
case EVENTTYPE.REP:
tempdata[x][1] = ev.getReps();
break;
}
x++;
}
}
}
Этот код работает после того, как я добавил «abstract» в класс Event и определил абстрактный метод getSavedEvents ().
Следующая проблема - методы getWeight (), getReps () и getTimeInHMS (). Они специфичны для типа дочернего события и снова не существуют в родительском классе Event. Если я сделаю их абстрактными в Event, теперь я должен определить их в каждом дочернем элементе, хотя getReps () не имеет контекста для TimedEvent.
public class Event {
public Date getDate() { return(_date); }
}
public class WeightEvent extends Event {
public int getWeight() { return(_weight); }
public int getReps() { return(_reps); }
}
public class TimedEvent extends Event {
public String getTimeInHMS() { return(_timeString); }
}
public class RepEvent extends Event {
public int getReps() { return(_reps); }
}
Сокращенный код, очевидно. Весовые события имеют дату, вес и количество повторений, связанных с ними. TimedEvents имеют дату и продолжительность времени, связанные с ними. RepEvents имеют дату и количество повторений, связанных с ними. Все методы даты находятся в родительском элементе, поскольку они являются общими для всех событий.
Если я не делаю getWeight (), getReps () абстрактными и объявляю их только в дочернем объекте, где они актуальны, вот ошибка, которую я получаю из EventTable в вышеописанном скопированном методе setEvent ():
EventTable.java:124: cannot find symbol
symbol : method getWeight()
location: class Event
tempdata[x][1] = ev.getWeight();
-John