すべての子がそのメソッドを実装しているため、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++;
}
}
}
このコードは、Eventクラスに「abstract」を追加し、getSavedEvents()という抽象メソッドを定義した後に機能します。
次の問題は、getWeight()、getReps()、およびgetTimeInHMS()メソッドです。これらは子イベントのタイプに固有であり、親の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); }
}
明らかに、省略されたコード。WeightEventsには、日付、重み、および担当者が関連付けられています。TimedEventsには、日付と時間の長さが関連付けられています。RepEventsには、日付と担当者の数が関連付けられています。日付メソッドはイベント間で共通であるため、すべて親にあります。
getWeight()、getReps()を抽象化せず、関連する子でのみ宣言する場合、上記のコピーされたsetEvent()メソッドのEventTableから取得するエラーは次のとおりです。
EventTable.java:124: cannot find symbol
symbol : method getWeight()
location: class Event
tempdata[x][1] = ev.getWeight();
-ジョン