我想覆蓋從父類繼承抽象方法的子類中的方法。我試圖改變泛型返回類型,但我有點困惑。Java:覆蓋通用方法
基礎通用類:
public abstract class BaseAdapter<T extends IEvent> {
private List<T> events;
public BaseAdapter(List<T> events) {
this.events = events;
}
public List<T> sort() {
// Some sorting...
return newFilteredEvents;
}
}
的子類:
public class AdapterEvent extends BaseAdapter<Event> {
public AdapterEvents(List<Event> events) {
super(events);
}
}
實施:
public abstract class BaseView extends View {
private BaseAdapter<IEvent> events;
@Override
protected View onCreate(Context context) {
View view = super.onCreate(context);
this.events = getAdapter();
return view;
}
/**
* The child class should provide an adapter
*/
protected abstract BaseAdapter<IEvent> getAdapter();
}
子視圖類,我想重寫參數化方法:
public class EventView extends BaseView {
@Override
protected View onCreate(Context context) {
return super.onCreate(context):
}
@Override
protected BaseAdapter<IEvent> getAdapter() {
List<Event> events = EventManager.getInstance().getEvents();
return new AdapterEvent(events);
}
}
這是Eclipse是拋出一個錯誤信息:
Type mismatch: cannot convert from AdapterEvents to BaseAdapter<IEvent>
注意的類和接口:事件和IEvent:
public interface IEvent {
public void setId(long id);
public long getId();
public void setStartMillis(long start);
public long getStartMillis();
public void setEndMillis(long end);
public long getEndMillis();
}
和從IEvent
public class Event implements IEvent {
private long id;
private long startTime, endTime;
@Override
public void setId(long id) {
this.id = id;
}
@Override
public long getId() {
return this.id;
}
// The other inherited methods...
}
我想要實現的是寫更多的抽象代碼,因爲這些類,接口將被多個類擴展(在我的情況下不同的視圖類型)。這些是抽象類:BaseAdapter
,BaseView
,IEvent
,這些是實現:AdapterEvent
,EventView
,Event
。