java - 如何用一个对象作为值来创建 HashMap,它又拥有自己的对象 HashMap。 java

标签 java object hashmap

我已经研究这个问题很长一段时间了,在互联网上搜索以查看是否有任何答案,但不幸的是没有运气。

正如标题所说,我正在尝试制作一个 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/

相关文章:

java - yarn 安装和构建消耗 100% CPU 和内存 95%

java - 内存级别的克隆方法行为 - java

Ruby Hash.new 怪异

java - 将 LocalDateTime 转换为 Instant 需要 ZoneOffset。为什么?

java - Selenium : I am Using Firefox version 46. 01 并在 eclipse 中测试显示错误消息

javascript - 如何在 JavaScript 中将对象转换为数组?

java - 将字符串拆分为 hashmap

android - Retrofit - 如何将 Response 转换为 HashMap?

java - 在 JPA 中定义关系属性

javascript - 根据条件javascript将其他对象键添加到数组中