首先,我的下面的代碼只是提供了我的類的抽象視圖,以便您可以輕鬆理解我的問題是關於什麼:) -so也不等於,哈希碼。將抽象類型的列表複製到具有特定類型的列表
我有一個ABC從可觀察其具有AbstractObservers
列表擴展然後,我必須從AbstractObservers一些類B和C繼承。 AbstractObservers實現Observer。
重點是現在在恢復類。
使用方法recover()我嘗試返回一個帶有具體類型(B或C)而不是AbstractObservers的List。
我不滿意我的解決方案,我認爲它可以更好,更容易?
你知道我該如何解決這個問題嗎?由於Hibernate,抽象類必須保留。
預先感謝您
public abstract class ABCObservable extends Observable {
List<AbstractObserver> abstractObserverList = new LinkedList<>();
public List<AbstractObserver> getAbstractObserverList() {
return abstractObserverList;
}
@Override
public synchronized void addObserver(Observer o) {
super.addObserver(o);
abstractObserverList.add((AbstractObserver) o);
}
}
AbstractObserver
public abstract class AbstractObserver implements Observer {
@Override
public void update(Observable o, Object arg) {
}
}
乙
public class B extends AbstractObserver {
}
Ç
public class C extends AbstractObserver {
}
恢復
public class Recover {
public List<? extends AbstractObserver> recover(ABCObservable abcObservable) {
List<AbstractObserver> returnList = new LinkedList<>(); //does that delivers a List with AbstractObserver or B or C?
if (abcObservable.getAbstractObserverList().get(0) instanceof B) {
returnList = new LinkedList<>();
returnList.addAll(abcObservable.getAbstractObserverList());
} else if (abcObservable.getAbstractObserverList().get(0) instanceof C) {
returnList = new LinkedList<>();
returnList.addAll(abcObservable.getAbstractObserverList());
}
return returnList; // returns a List with B or C elements
}
}
什麼是使用'recover()'?看起來'recover()'的調用者將擁有上下文並能夠轉換爲具體的List類型。但是,對於需要它成爲具體類型的恢復列表做了什麼? –
由於列表中的類型,下一步要做什麼,所以不會調用recover()的調用方。但是recover()必須已經提供了正確的類型。 – AnnaKlein