簡體   English   中英

如何使 object 將自身存儲在 hashmap 中

[英]How to make an object store itself in a hashmap

所以我有 4 個類,Testest 有一個 main 方法,Phone 擴展了 Product、Product 和 ProductDB,它有一個 hashmap。 當我制作一部新手機時,我希望手機自動存儲在數據庫中。

public class Product {

protected String productID;
protected String name;
private String description;
private double price;

public Product(){
    Product db = new ProductDB();
    productID = this.toString();
    db.add(productID, this);
}
(Getter and setter methods here...)
}


public class Phone extends Product {

private String make;
private String model;
private int storage;
public Phone(String make, String model, int storage){
    this.make = make;
    this.model = model;
    this.storage = storage;
}
(Getter and setter methods here...)
}


import java.util.HashMap;
public class ProductDB {
    private HashMap<String,Product> products = new HashMap<String, Product>();
    public void add(String productID, Product product){
        products.put(productID, product);
    }
    public void remove(String productID){
        products.remove(productID);
    }
    public Product find(String productID){
        return products.get(productID);
    }
    public Object showAll(){
        return products.values().toArray();
    }

}

public class Testest{
 public static void main(String[] args){
     ProductDB db = new ProductDB();
     Phone phone1 = new Phone("Huwawei P30", "HP30", 50000);
     Phone phone2 = new Phone("Huwawei P30 Pro", "HP30PRO", 70000);
     Phone phone3 = new Phone("Samsung Galaxy SX", "SGSX", 65000);
     System.out.println(db.find(phone1.productID));
     System.out.println(phone1.productID);
 }
}

我希望在查找該特定 ID 時返回 object,但問題是 HashMap 出於某種原因為空

編輯我將 productID 設為私有。 依然沒有

似乎您希望您的數據庫包含所有創建的電話,在這種情況下,不是每次都創建一個數據庫,這將是無用的,而且因為您的數據庫是從多個地方訪問的,所以使您的數據庫字段和方法 static 和只需從您想要的位置訪問它:

public class ProductDB {
    final private static HashMap<String,Product> products = new HashMap<String, Product>();
    public static void add(String productID, Product product){
        products.put(productID, product);
    }
    public static void remove(String productID){
        products.remove(productID);
    }
    public static Product find(String productID){
        return products.get(productID);
    }
    public static Object showAll(){
        return products.values().toArray();
    }

}

然后在 Product 構造函數中只寫:

    public Product{
        productID = this.toString();
        ProductDB.add(productID, this);
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM