从hashmap处理静态数据

时间:2016-01-21 18:20:11

标签: java static-methods

以下是我给出的代码,并告诉他使用。

我没有多少Java经验,但我对OOP有一些了解。

我有一个包含库存商品价格和数量的散列图,我希望能够显示所有这些变量,将它们添加到列表中,并在不同的类中访问价格等。我已经阅读了文档和很多网站,但我仍然不清楚如何使用这些数据。

public class StockData {

    public static class Item {

        Item(String n, double p, int q) {
            name = n;
            price = p;
            quantity = q;
        }

        // get methods
        public String getName() {
            return name;
        }

        public double getPrice() {
            return price;
        }

        public int getQuantity() {
            return quantity;
        }

        // instance variables 
        private final String name;
        private final double price;
        private int quantity;
    }
    private final static Map<String, Item> stock = new HashMap();

    static {
        // if you want to have extra stock items, put them in here
        // use the same style - keys should be Strings
        stock.put("00", new Item("Bath towel", 5.50, 10));
        stock.put("11", new Item("Plebney light", 20.00, 5));
        stock.put("22", new Item("Gorilla suit", 30.00, 7));
        stock.put("33", new Item("Whizz games console", 50.00, 8));
        stock.put("44", new Item("Oven", 200.00, 4));
    }
    public static Map<String, Item> getStock() {
        return stock;
       }
    public static String getName(String key) {
        Item item = stock.get(key);
        if (item == null) {
            return null; // null means no such item
        } else {
            return item.getName();
        }
    }

    public static double getPrice(String key) {
        Item item = stock.get(key);
        if (item == null) {
            return -1.0; // negative price means no such item
        } else {
            return item.getPrice();
        }
    }

    public static int getQuantity(String key) {
        Item item = stock.get(key);
        if (item == null) {
            return -1; // negative quantity means no such item
        } else {
            return item.getQuantity();
        }
    }
    public static void update(String key, int extra) {
        Item item = stock.get(key);
        if (item != null) {
            item.quantity += extra;
        }
    }

    public static void close() {
        // Does nothing for this static version.
        // Write a statement to close the database when you are using one
    }

}

1 个答案:

答案 0 :(得分:1)

您可以从任何地方访问此数据,因为它是静态定义的。例如,您可以编写一个Sandbox类来运行如下的主函数:

public class Sandbox {
    public static void main (String[] args)
    {

        for(String key : StockData.getStock().keySet()) {
            System.out.println("Item: " + key);

            System.out.println("Name: " + StockData.getName(key) +
                    "  Price: " + StockData.getPrice(key) +
                    " Qty: " + StockData.getQuantity(key));
        }
    }
}

输出:

Item: 00
Name: Bath towel  Price: 5.5 Qty: 10
Item: 11
Name: Plebney light  Price: 20.0 Qty: 5
Item: 22
Name: Gorilla suit  Price: 30.0 Qty: 7
Item: 33
Name: Whizz games console  Price: 50.0 Qty: 8
Item: 44
Name: Oven  Price: 200.0 Qty: 4