我有两个这样的班
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
的子类。