如果我使用类作为类型参数,如何在参数化类中创建此对象的实例?

时间:2013-09-28 20:28:35

标签: java collections compiler-errors type-erasure


假设我假设扩展LinkedList以创建一个名为GroceryList的专门子类。

GroceryList参数化为类GroceryItem作为其类型。

当我尝试在GroceryItem中作为实例访问GroceryList时,我在NetBeans中遇到了这个编译错误:

incompatible types
 Required: GroceryItem
 Found:    Object
 where GroceryItem is a type-variable
   GroceryItem extends Object declared in class GroceryList


显然这是由于“类型擦除”,到目前为止,我没有成功使用类作为“类型变量”和类这样的类...



这是一个简单的例子:

public class GroceryList<GroceryItem> extends LinkedList {

    public GroceryList() {
    }

    public double getItemPrice(GroceryItem item) {

        // compile-error occurring here:
        return item.getPrice();
    }

    // compile-error occurring here:
    public GroceryItem getGroceryItem(String name, String brand, double price) {

        // ...finding the grocery item based on the parameters here:
        // ...

        return item;
    }
} // end of class

1 个答案:

答案 0 :(得分:3)

使用LinkedList类型

扩展GroceryItem
public class GroceryList extends LinkedList<GroceryItem>

或使用以下方法将类定义为泛型:

public class GroceryList<T extends GroceryItem> extends LinkedList<T>