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

标签 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

最佳答案

使用 GroceryItem 类型扩展 LinkedList

public class GroceryList extends LinkedList<GroceryItem>

或者使用以下方法将类定义为通用类:

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

关于java - 如果我使用类作为类型参数,如何在参数化类中创建该对象的实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19071342/

相关文章:

Java类测试问题

java - 使用 Java 列出信封状态更改 PARTNER_AUTHENTICATION_FAILED

java - 当属性被标记为 @NotNull 时,IntelliJ 会提示对属性进行空检查

java - ArrayList 的排序复制构造

java - 在 TreeSet 上使用迭代器

c++ - 类中没有声明成员函数 - 基本编译错误

compiler-errors - YACC和上下文无关文法

java - 如何将动态属性添加到 JAXB 中的动态元素

java - 从迭代器的 next 方法中获取 ClassCastException

c - 头文件 (.h) 包含 gcc 的问题