当我尝试编译时,我会在未选中-Xlint的情况下重新编译以获取详细信息。当我运行它时说:" T扩展了在GenericOrder类中声明的Product。
我想" T"意味着我可以在我的阵列中推送任何产品。我的数组也没有给出orderID。我喜欢在前进之前检查一下,但我无法弄清楚如何用一些计算机部件创建GenericOrder。
abstract class Product {
protected float price;
// return the price of a particular product
abstract float price();
}
class ComputerPart extends Product {
public ComputerPart(float p) {
price = p;
}
@Override
public float price() {
return price;
}
}
class GenericOrder<T> {
private static int ID = 0;
private String orderID;
List<T> order;
public GenericOrder() {
orderID = "order ID " + ID++;
order = new ArrayList<>();
}
public String getOrderID() {
return orderID;
}
public void addToOrder(T newProduct) {
order.add(newProduct);
}
public List<T> getProducts() {
return order;
}
public static void main(String args[]) {
GenericOrder order = new GenericOrder ();
order.getOrderID();
order.addToOrder(new ComputerPart(5));
order.getProducts();
}
}
答案 0 :(得分:2)
在main
中,只需指定通用类型:
public static void main(String args[]) {
GenericOrder<ComputerPart> order = new GenericOrder<>();
order.getOrderID();
order.addToOrder(new ComputerPart(5));
order.getProducts();
}
答案 1 :(得分:2)
T
不表示该列表可以存储任何内容。这意味着列表可以存储T
,T
可以是任何一种类型。例如,如果Integer
为List<T>
,则GenericOrder
只能存储整数。
这里的问题是GenericOrder order = new GenericOrder ();
是泛型类型。通常,当您使用泛型类型时,您指定所有泛型参数,但您没有:
Object
在这种情况下,编译器将其视为具有Object
的泛型参数。这意味着内部列表可以存储Object
或任何扩展GenericOrder
的内容。这显然不是你想要的。因此,您应该添加通用参数,以表明您需要ComputerPart
GenericOrder<ComputerPart> order = new GenericOrder<>();
:
if (filter.value === 'all') {
return true;
} else {
// what ever the value is, we will only
// show rows that have a column value
// that matches it
// If value is 'group1' just show the ones where the column
// value is 'group1', etc etc.
return row[filter.id] == filter.value;
}