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