1

我有一个作为类的库存列表,然后是一个具有如下所示构造函数的商店类。商店有一个链接到股票类的数组列表。

我将如何访问某个商店的数组列表?

EG 如果我选择商店 argos,我想要里面的所有库存。每个商店都有自己的库存

    public Store(int storeId, String name, String location){
      this.storeId = storeId;
     this.name = name;
     this.location = location;
      items = new ArrayList<Stock>();
     }
4

5 回答 5

3

如果每个Store人都有自己的Stock项目列表,那么这必须是 Stock 类的属性私有实例变量。然后可以使用 getter 访问 Store 的项目,例如。

public class Store {
    private List<Stock> items;

    public Store(List<Stock> items){
        this.items = items;
    }

    public List<Stock> getStock(){ 
        // get stock for this Store object. 
        return this.items;
    } 
    public void addStock(Stock stock){
        this.getStock().add(stock);
    }
}

然后,您可以使用 Stock 项目的 getter 访问 Store 实例的项目。

于 2013-05-01T14:18:01.290 回答
1
public class Store {
    private List<Stock> items;

    public Store(int storeId, String name, String location){
        this.storeId = storeId;
        this.name = name;
        this.location = location;
        items = new ArrayList<Stock>();
    }

    public List<Stock> getAllStock(){
        return this.items;
    }
}
于 2013-05-01T14:25:20.503 回答
1

可以通过这种方式提供安全访问,但如果您不向用户提供商店的密钥并返回库存清单,那么封装会更好。

public class Store {
    private List<Stock> stock;

    public Store(List<Stock> stock) {
        this.stock = ((stock == null) ? new ArrayList<Stock>() : new ArrayList<Stock>(stock));
    }

   public List<Stock> getStock() {
       return Collections.unmodifiableList(this.stock);
   }
}
于 2013-05-01T14:18:44.010 回答
1

老实说,我建议使用 HashMap。将每个 Store 作为键或存储 ID,然后将 Stock 列表作为值。这将允许您简单地执行以下操作:

Map storeMap = new HashMap<String, List<Stock>();
items = storeMap.get(key);
于 2013-05-01T14:20:24.720 回答
0

Store将列表设置为对象有很多可能性,并且getter您可以return将列表返回。

public Store(int storeId, String name, String location,ArrayList<Stock> list){
    this.storeId = storeId;
    this.name = name;
    this.location = location;
    this.items = new ArrayList<Stock>();  //or any possibility to set list
}

public ArrayList<Stock> getListOfStock(){
    return this.items;
}
于 2013-05-01T14:19:50.517 回答