首先,我的下面的代码只是提供了我的类的抽象视图,以便您可以轻松理解我的问题是关于什么:) -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