java存储实例变量并使用键值之一进行访问

时间:2018-11-13 12:45:30

标签: java class variables constructor

我目前正在uni学习Java,遇到此问题:

public class simpleStockManager {
    private String sku;
    private String name;
    private double price;

    public void newItem(String sku, String name, double price) {
        this.sku = sku;
        this.name = name;
        this.price = price;
    }

    public String getItemName(String sku) {
        return name;
    }
}

我已经声明了一个类和一些实例变量,我尝试使用sku访问项目。 因此,如果我按此顺序声明3个项目:

simpleStockManager sm = new simpleStockManager();
sm.newItem("1234", "Jam", 3.25);
sm.newItem("5678", "Coffee", 4.37);
sm.newItem("ABCD", "Eggs", 3.98);

当我尝试使用getItemName的{​​{1}}方法时,它应该返回sku == "5678",但它返回的是"Coffee"。 我认为这是最新声明的项目,它会覆盖前一个项目,但我不知道如何解决。 任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

每次调用newItem都会更改实例变量的值。

您将始终获得m.newItem("ABCD", "Eggs", 3.98);设置的最后一个值

如果您想使用 sku 作为存储多个变量的键,则可以使用Map

例如:

class SimpleStockManager{
    // The key of your map will be sku, 
    //and the name and the price can be for exemple in a Product class
    private HashMap<String, Product>  products = new HashMap<>();

    public void newItem(String sku, String name, double price){
        // A call to newItem will create a new Product and store it 
        products.put(sku, new Product(name, price));
    }

    public String getItemName(String sku){
        if (products.containsKey(sku)){
            return products.get(sku).getName();
        }else {
            return " Product not found...";
        }
    }
}