【问题标题】:How to make an object store itself in a hashmap如何使对象将自身存储在哈希图中
【发布时间】:2022-01-16 10:54:26
【问题描述】:

所以我有 4 个类,Testest 有一个 main 方法,Phone 扩展了 Product、Product 和 ProductDB,它有一个哈希图。当我制作一部新手机时,我希望手机自动存储在数据库中。

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 时返回对象,但问题是 HashMap 出于某种原因为空

编辑我将 productID 设为私有。还是什么都没有

【问题讨论】:

  • 你在main方法中创建的db,和你在每个Product实例中创建的db是不同的对象,你的main方法中的db是从不使用的。
  • 您可以通过将 db 传递给 phone 的构造函数而不是在构造函数中创建它来解决此问题
  • 主方法中的db用于使用phone1的id查找phone1
  • 它从来没有添加过手机。
  • db in main 与您每次创建 Product 类时创建的不同。

标签: java database oop


【解决方案1】:

您似乎希望您的数据库包含所有已创建的电话,在这种情况下,不是每次都创建一个数据库,这将是无用的,而且因为您的数据库是从多个地方访问的,所以使您的数据库字段和方法静态,只需从您想要的位置访问它:

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);
    }

【讨论】:

    猜你喜欢
    • 2015-05-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-14
    • 2012-01-06
    • 2012-11-12
    • 1970-01-01
    相关资源
    最近更新 更多