我遇到了一个问题,我不知道这种超载是否正确。 我在许多情况下都采用了这种方法,例如:
public class Subject<T>{
private long id;
private T data;
protected List<Observer<T>> observers; <code>
//..
public List<Observer<T>> getObservers() {
return observers;
}
//..
}
public class OrdersSubject extends Subject<List<Order>>{
String status;
List<List<Order>> reentrantOrders;
boolean islimit = false;
Long limit = 0l;
//..
public List<RobotObserver> getObservers(){
return this.observers;
}
//..
}
我会得到正确的getObservers(), 谢谢你。
In fact this is the implementation of RobotObserver:
public class RobotObserver extends Observer<List<Order>> implements RobotCallback{
Map<Integer,String> sysstat = new HashMap<Integer,String>();
private Subject subject;
//eActLevel is a Map containing and ordered list of <emotion,transitions of emotion list>
private Map<String,List<Double>> eActLevel;
//..
public List<Order> update(List<Order> o) {
// reentrant Orders
reentrantO = processOrders(o);
this.data = this.callback(reentrantO);
return data;
}
}
import java.util.List;
import com.res.emorobots.data.Order;
interface RobotCallback extends Callback<List<Order>>{
}
我得到一个编译错误。我来自c ++世界,实际上,我会对c ++ deque和实现矢量接口的更改列表感兴趣。
事实上,我正在寻找这样的东西:
public class RobotObserver extends Observer<K<Order> implements List<Order>> implements Callback...
答案 0 :(得分:0)
OrdersSubject::getObservers()
没有正确覆盖Subject::getObservers()
。 OrdersSubject
扩展了Subject<List<Order>>
,因此其getObservers()
方法应返回List<Observer<List<Order>>>
。但事实并非如此。相反,它返回List<RobotObserver>
。
List<RobotObserver>
不是List<Observer<List<Order>>>
的子类型,即使RobotObserver
是Observer<List<Order>>
的子类型,就像List<String>
不是{的子类型一样尽管List<Object>
是String
的子类型,但{1}}。非通配符泛型类型参数必须完全匹配。