1

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

这是我的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);用消息不兼容类型指示。

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

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

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

4

3 回答 3

6
private ArrayList stock;

您应该使用有界类型重新声明它,如下所示:

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

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

Product test = stock.get(index);

将不起作用,因为您试图将 raw 分配ObjectProduct.

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

于 2013-10-20T22:16:57.790 回答
4

stock被定义为private ArrayList stock,这意味着stock.get()返回一个没有任何特殊类型的对象。您应该将 Stock 设为产品的 ArrayList

ArrayList<Product> stock;

get手动转换方法的结果

Product test = (Product)stock.get(whatever);
于 2013-10-20T22:18:52.927 回答
1
Product test = (Product) stock.get(index);

或者,如果您列出您的清单,List<Product> stock您的线路应该无需更改即可工作。

于 2013-10-20T22:16:53.573 回答