Java arraylist 不兼容类型错误

标签 java arraylist bluej incompatibletypeerror

回想起来,这个问题的答案可能会很明显,但现在我发现自己还停留在这个问题上。我会先给出一些代码块,然后再提出问题。

这是我的 Stockmanager 类的一部分,我省略了一些与这个问题无关的方法。

import java.util.ArrayList;

public class StockManager
{
private ArrayList stock;

public StockManager()
{
    stock = new ArrayList();
}

public void addProduct(Product item)
{
    stock.add(item);
}

public Product findProduct(int id)
{
    int index = 0;
    while (index < stock.size())
    {
        Product test = stock.get(index);
        if (test.getID() == id)
        {
            return stock.get(index);
        }
        index++;
    }
    return null;
}

public void printProductDetails()
{
    int index = 0;
    while (index < stock.size())
    {
        System.out.println(stock.get(index).toString());
        index++;
    }
}

这是我的类产品,同样省略了一些方法。

public class Product
{
private int id;
private String name;
private int quantity;

public Product(int id, String name)
{
    this.id = id;
    this.name = name;
    quantity = 0;
}

public int getID()
{
    return id;
}

public String getName()
{
    return name;
}

public int getQuantity()
{
    return quantity;
}

public String toString()
{
    return id + ": " +
           name +
           " voorraad: " + quantity;
}

我的问题在于我在 findProduct() 方法中遇到编译时错误。更具体地说,行 Product test = stock.get(index); 用消息 incompatible types 表示。

StockManager 的构造函数创建一个名为 stock 的新 ArrayList。从方法 addProduct() 可以看出,此 ArrayList 包含 Product 类型的项目。 Product 类有许多变量,其中一个称为 id,类型为整数。该类还包含一个返回 id 的方法 getID()

据我所知,从数组列表中获取项目的方法是 get() 方法,() 之间的数字表示项目的位置。由于我的数组列表包含 Product 的实例,因此当我对数组列表使用 get() 方法时,我希望得到一个 Product 作为结果。所以我不明白为什么当我定义一个名为 test 的 Product 类型的变量并尝试将 arraylist 中的一个项目分配给它时它不起作用。据我所知,我在方法 printProductDetails() 中成功地使用了相同的技术,我在 arraylist 的对象上使用 Product 的 toString() 方法。

我希望有人能够为我澄清我错在哪里。如果它有任何不同,我在 BlueJ 中做这些事情,这可能不是最好的工具,但它是我应该用于这个学校项目的工具。

最佳答案

private ArrayList stock;

您应该像这样使用有界类型重新声明它:

private List<Product> stock = new ArrayList<Product>();

如果你不这样做,这一行:

Product test = stock.get(index);

不会工作,因为您正在尝试将原始 Object 分配给 Product

其他人建议将 Object 转换为 Product,但我不推荐这样做。

关于Java arraylist 不兼容类型错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19483503/

相关文章:

java - 如何在小数点后添加n个零?

java - 在 Node 中加载 Java JNA 原生库

java - 如何使用带有 HTML 的 StyledDocument 进行输出?

java - Java 中 Arraylist 的 get 和 set 方法

java - 替换自定义对象的 ArrayList 中的值

java - 为什么它说 next(int) 在 java.util.Random 中具有 protected 访问权限?

java - 二十一点游戏,需要造型帮助

java - Eclipse下如何将maven格式的所需项目添加到另一个项目中?

Java Thread.sleep() 实现

java - arraylist,删除for循环中的变量