arraylist中的最后一个变量覆盖了所有变量

时间:2015-09-30 23:24:40

标签: android

这是我的ProductcatalogClass

public class ProductcatalogClass {
    private ArrayList<ProductClass> productlist;

    public ArrayList addproduct() {        

        // ...
        return productlist;   
    }
}

这是我的ProductClass

public class ProductClass {
    private String productName;
    private String availability;
    private int price;

    // getters and setters
}
...

我该如何解决这个问题? 我知道有些方法尚未完成但我无法完成,直到我弄清楚如何修复此arrayList问题

2 个答案:

答案 0 :(得分:1)

您正在使用单个Product(我将其重命名为更好的名称)对象并将其重复添加到列表中,因此难怪您为什么会这样做。你可以为更好(和正确)的代码做些什么,在这个类中有一个构造函数,可以构造一个新实例并设置所有成员。对于更短的代码,您可以使用3个列表(每个属性一个)并迭代它们。然而,这不能很好地扩展到更大的数字或属性,所以我不会显示它。

Product中创建一个构造函数:

public class Product {
    private String productName;
    private String availability;
    private int price;

    public Product(String productName, String availability, int price) {
        this.productName = productName;
        this.availability = availability;
        this.price = price;
    }
}

在目录类中:

public List<Product> addproduct() {
    productList.addAll(Arrays.asList(
        new Product("Dell_1", "Available", 600),
        new Product("Dell_2", "Available", 800),
        new Product("Dell_3", "Available", 590),
        new Product("Dell_4", "Available", 400),
        new Product("Dell_5", "Available", 700),
        new Product("Dell_6", "Available", 530),
        new Product("Dell_7", "Available", 550),
        new Product("Dell_8", "Available", 500),
        new Product("Dell_9", "Available", 700),
        new Product("Dell_10", "Available", 600));
    return productList;
}

在此阶段,您可以看到此方法没有意义,因为您始终添加完全相同的产品集。如果我不知道你打算怎么做,我就无法进一步回答。

答案 1 :(得分:1)

当您向Product添加productList时,实际上只添加了对该对象的引用(类似于C中的指针)。因此,如果将相同的对象添加到列表中十次,您将拥有一个对一个对象的十个引用的列表。

每次要将其添加到列表中时,都应创建新的Product