我已经研究这个问题很长一段时间了,在互联网上搜索以查看是否有任何答案,但不幸的是没有运气。
正如标题所说,我正在尝试制作一个 HashMap
,它使用 Object
(另一个类)作为值。然后,我想要那个 Object
,在它自己内部保存另一个 HashMap
,它也使用另一个 Object
作为值。
这是我的做法:
BookAdmin.java
import java.util.HashMap;
public class BookAdmin
{
private static HashMap<String, Customer> customer = new Customer<String, Customer>();
public static void main(String [] args)
{
customer.put("James", new Customer("James"));
customer.put("Peter", new Customer("Peter"));
customer.get("James").newBook("Flying 101");
customer.get("James").seeBooks();
}
}
Customer.java
import java.util.HashMap;
public class Customer
{
private static HashMap<String, Book> book = new Book<String, Book>();
private static String name = "";
public Customer (String nameIn)
{
name = nameIn;
}
public void newBook (String title)
{
book.put(title, new Book(title));
}
public void seeBooks()
{
for (String l: book.keySet())
{
System.out.println(book.get(l).toString());
}
}
}
Book.java
public class Book
{
private static String title = "";
public Book (String titleIn)
{
title = titleIn;
}
public String toString()
{
return title;
}
}
所以看起来还不错,但如果我也查看“Peter”的书,显示他也拥有“Flying 101”。就像他们共享同一本书 HashMap 一样。
最佳答案
该问题的原因是您在静态上下文中维护 map 。这意味着 map 在一个类的所有实例之间共享,另请参阅 JLS 8.3.1.1. - static Fields
If a field is declared static, there exists exactly one incarnation of the field, no matter how many instances (possibly zero) of the class may eventually be created.
所以当你说“这就像他们共享同一本书 HashMap 。”,那是因为他们确实这样做了:)
从发布的代码中删除所有静态修饰符,您应该可以开始了
关于java - 如何用一个对象作为值来创建 HashMap,它又拥有自己的对象 HashMap。 java ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33335716/