坚持使用java setter方法

时间:2013-04-30 15:54:59

标签: java setter

我有一个StockList类,其中包含一个链表,可以使用各种方法控制库存。但是我仍然坚持在我的方法体内放入我的updateItemPrice方法。 我是否需要使用setter来设置新的商品价格,如果是这样我将如何进行呢?

到目前为止,这是我的代码,非常感谢任何帮助!

import java.util.*;
public class StockList {
{
private LinkedList<StockItem> stock
        = new LinkedList<StockItem>();


public StockList() {};


// Adds item to end of stock list
public void addItem(StockItem item) 
{
    this.stock.addLast(item);
}


// Removes item identified by productID from stock list
public void deleteItem(String itemID) 
{
    ListIterator itr = stock.listIterator();
while(itr.hasNext())
 {
            StockItem item = (StockItem)itr.next();
    if(item.getitemID() == itemID)
    {
                    stock.remove(itr.previousIndex());
        break;
    }
    }
}


// Updates price of existing item
public void updateItemPrice(String itemID, double price) 
{
    ???
}


// Updates quantity of existing item
public void updateItemQuantity(String itemID, int quantity) 
{…}


// Updates re-order level of existing item
public void updateReOrderLevel(String itemID, 
int reOrderLevel) 
{…}


// Returns formatted representation of the stock list
public String formatStockList()
{…}


// Returns formatted representation of re-order list
// Items are on this list if quantity < reOrderLevel
public String formatReOrderList()
{…}
}




}

5 个答案:

答案 0 :(得分:1)

ListIterator itr = stock.listIterator();
while(itr.hasNext())
 {
            StockItem item = (StockItem)itr.next();
    if(item.getitemID() == itemID)
    {
                    item.setPrice(price);
        break;
    }
    }

尽管如此,使用HashMap<String, StockItem>()存储股票对象的ID可能更好一点,更新价格会更容易。

您应该将ID存储为Long而不是String,因此这将是HashMap<Long, StockItem>()

答案 1 :(得分:1)

由于您有itemId,我不会使用列表。我会使用Map,其中itemId为键,StockItem为值。然后你的添加和删除方法变得更加简单

Map<String, StockItem> stocks = new HashMap<String, StockItem>();

public void addStockItem(StockItem stockItem) {
    this.stocks.put(stockItem.getItemId(), stockItem);
}

public void deleteStockItem(StockItem stockItem) {
    this.stocks.remove(stockItem.getItemId());
}

然后更新就像从地图中取出相应的项目并更新其价格一样简单。

public void updateStockItem(String id, Double price) {
     StockItem item = this.stocks.get(id);
     item.setPrice(price);
}

答案 2 :(得分:1)

StockItem需要使用setter方法将Price设置为setPrice

 ListIterator itr = stock.listIterator();
while(itr.hasNext())
 {
    StockItem item = (StockItem)itr.next();
    if(item.getitemID() == itemID)
    {
                    item.setPrice(price);
         break;
    }
  }

您的删除代码中也有问题...

public void deleteItem(String itemID) 
{
    ListIterator itr = stock.listIterator();
while(itr.hasNext())
 {
            StockItem item = (StockItem)itr.next();
    if(item.getitemID() == itemID)
    {
                    stock.remove(itr.previousIndex());
        break;
    }
    }
}

这会给你concerrent Access exception。请使用以下代码。

public void deleteItem(String itemID) 
    {
        ListIterator itr = stock.listIterator();
    while(itr.hasNext())
     {
         StockItem item = (StockItem)itr.next();
        if(item.getitemID() == itemID)
        {
            itr.remove(); // Removes last obejct returned by itr.next()
            break;
        }
     }
  }

答案 3 :(得分:0)

 // Updates price of existing item
    public void updateItemPrice(String itemID, double price) 
    {
        ListIterator itr = stock.listIterator();
while(itr.hasNext())
 {
            StockItem item = (StockItem)itr.next();
    if(item.getitemID() == itemID)
    {
                    item.setPrice(price);
        break;
    }
    }
}

答案 4 :(得分:0)

除了@hvgotcodes之外,每个人的答案都有一个非常基本的错误:

if(item.getitemID() == itemID) // this won't work!

@hvgotcodes解决方案是实现课程的正确方法。使用HashMap远比迭代LinkedList删除内容要好得多。