继承和泛型Java问题观察者

时间:2018-10-21 02:46:43

标签: java generics inheritance

我遇到了一个问题,我不知道这种超载是否正确。 我在许多情况下都采用了这种方法,例如:

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...

1 个答案:

答案 0 :(得分:0)

OrdersSubject::getObservers()没有正确覆盖Subject::getObservers()OrdersSubject扩展了Subject<List<Order>>,因此其getObservers()方法应返回List<Observer<List<Order>>>。但事实并非如此。相反,它返回List<RobotObserver>

List<RobotObserver>不是List<Observer<List<Order>>>的子类型,即使RobotObserverObserver<List<Order>>的子类型,就像List<String>不是{的子类型一样尽管List<Object>String的子类型,但{1}}。非通配符泛型类型参数必须完全匹配。