我有两个这样的班

public class Wire<E extends Electricity> implements Connection<E> {
    private ArrayList<Inlet<E>> outlets = new ArrayList<Inlet<E>>();

    public void outputToAll() {
        for (Inlet<E> inlet : outlets){
            inlet.addToStore(new Electricity(amountPer));
        }
    }
}




public abstract class Inlet<E> {
    private E store;

    public void addToStore(E inputObj){
       this.store.add(inputObj);
   }
}


入口没有任何错误,但Wire给我的错误是


  Inlet类型的方法addToStore(E)不适用于参数(电性)


但是,由于outputToAll E中必须扩展电力,所以Inlet至少是Inlet,为什么将Electricity对象传递给addToStore无效?

而且,如果编译器不够聪明,无法知道这将起作用,那么什么是好的解决方法?

最佳答案

您不需要Wire类对您想做的事情是通用的。

如果您只有:

public class Wire implements Connection<Electricity> {
    private ArrayList<Inlet<Electricity>> outlets = new ArrayList<Inlet<Electricity>>();

    public void outputToAll() {
        for (Inlet<Electricity> inlet : outlets){
            inlet.addToStore(new Electricity(amountPer));
        }
    }
    ...
}


由于Liskov substitution principle,该类也可能(由于我看不到其余部分)也可用于Electricity的子类。

08-28 17:56