如何使对象将自身存储在哈希图中
How to make an object store itself in a hashmap
所以我有 4 个 类,Testest 有一个主要方法,Phone 扩展了 Product、Product 和 ProductDB,它有一个 hashmap。当我创建一个新的 phone 时,我希望 phone 自动存储在数据库中。
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 时,我希望它成为 return 对象,但问题是 HashMap 出于某种原因是空的
编辑 我将 productID 设为私有。仍然没有
您似乎希望您的数据库包含所有已创建的电话,在这种情况下,而不是每次都创建一个数据库,这将是无用的,而且因为您的数据库是从多个地方访问的,所以使您的数据库更加一致字段和方法是静态的,只需从你想要的地方访问它:
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);
}
所以我有 4 个 类,Testest 有一个主要方法,Phone 扩展了 Product、Product 和 ProductDB,它有一个 hashmap。当我创建一个新的 phone 时,我希望 phone 自动存储在数据库中。
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 时,我希望它成为 return 对象,但问题是 HashMap 出于某种原因是空的
编辑 我将 productID 设为私有。仍然没有
您似乎希望您的数据库包含所有已创建的电话,在这种情况下,而不是每次都创建一个数据库,这将是无用的,而且因为您的数据库是从多个地方访问的,所以使您的数据库更加一致字段和方法是静态的,只需从你想要的地方访问它:
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);
}