我有一个带有通用集合(Flavors)的抽象类(Candy)。Candy 有一个工厂方法来生成它自己的具体实例。它还具有获取适用于具体糖果的通用风味实例并将风味添加到其集合中的方法。
我知道 getter 正在工作,因为如果我从 CandyStore 投射风味,则具体风味独特的方法可以正常工作。但是最后一行,addFlavor(flavor), errs (Eclipse) 在我身上。错误是:“ICandy 类型中的方法 addFlavor(capture#5-of ? extends IFlavor) 不适用于参数 (IFlavor)。” 谁能解释发生了什么?
界面:
public interface ICandy <Flavor extends IFlavor> {
public Flavor getFlavorForCandy();
public void addFlavor(Flavor flavor);
}
抽象类:
public abstract class AbstractCandy<Flavor extends IFlavor> implements ICandy<Flavor> {
public static ICandy<? extends IFlavor> buildCandy(String flavor){
if(flavor.equals("Jolly Rancher")
return new JolRanchCandy();
}
public Flavor getFlavorForCandy() {
return (Flavor) new CandyFlavor();
}
public void addFlavor(Flavor flavor) {
... //implemented
}
}
具体类:
public class JolRanchCandy extends AbstractCandy<JolRanchFlavor> {
... //implemented
}
使用者:
public class CandyStore {
private ICandy<? extends IFlavor> candy;
private IFlavor flavor;
public void createCandy() {
candy = AbstractCandy.buildCandy("Jolly Rancher");
flavor = candy.getFlavorForCandy(); //returns a JolRanchFlavor
flavor.setName("Apple"); //etc for creating flavor
candy.addFlavor(flavor); //no luck
}
}
编辑:为清楚起见,JolRanchFlavor extends CandyFlavor implements IJolRanchFlavor
和CandyFlavor implements IFlavor
.