我是新手,对泛型不太熟悉。在尝试在一个小程序中使用它们时,遇到了以下问题。下面是必要的信息。
我会尽量提供必要的信息,如果有任何缺失,请告诉我,我会提供所需的内容。
首先是以下接口:
1: public interface IPrice<T extends IPrice<T>> {
2: void setPriceToZero();
3: T addPrice(T price);
4: T subtractPrice(T price);
5: T multiplyPriceByFactor(int factor);
6: String priceToString();
7: }
这是由类BnSPrice实现的;以下是可能需要的部分:
1: public class BnSPrice implements IPrice<BnSPrice> {
2: public BnSPrice subtractPrice(BnSPrice price) {...}
2: }
现在这部分不能编译,而且我也不太理解:
1: public static void main(String[] args){
2: [...]
3: IPrice<? extends BnSPrice> test = new BnSPrice(5);
4: test.subtractPrice(new BnSPrice(5));
5: [...]
6: }
我的问题是
"错误:(27,28)java:不兼容的类型:main.bnsCalculatorModel.BnSPrice 无法转换为捕获#1 of ? extends main.bnsCalculatorModel.BnSPrice"
问题出现在我调用减法方法的那一行。
为什么会出现这种情况,我该如何更正,以使我仍然可以通过接口编程?
(我的目标是,将来可以轻松地通过其他“价格类型”扩展我的程序。)
IPrice<? extends BnSPrice> test = new BnSPrice(5);
这一行吗? - Pyranja