将新对象存储为哈希映射的值?

2022-09-03 04:54:22

我试图找到一种方法将类的新实例存储为Java哈希图中的值。这个想法是由Java讲师给我的,目的是创建一个数据存储结构,可用于我正在开发的程序。

他向我推荐的想法是使用一个哈希映射,将计算机的名称存储为密钥,该值将是类InfoStor.class的新实例。InfoStor 包含 getName()、setName()、getMemory() 等方法。

我有一个基本测试的类和方法,看看它是否有效。我遇到的问题是,一旦我在哈希图中创建了一个新条目,就无法弄清楚如何使用InfoStor中的方法。

这是我到目前为止拥有的代码;

VMware.class

import java.util.HashMap;

public class VMware {

    public static void main(String[] args) {                       
        HashMap <String, Object> mapper = new HashMap();            
        mapper.put("NS01", new InfoStor("NS01"));            
        //mapper.get("NS01").            
    }            
}

信息管理员.class

public class InfoStor {

    private String vmName;
    private String platform;
    private Integer memory;

    public InfoStor (String name) {
        vmName = name;
    }

    String getName(){
        return vmName;
    }

    void setPlatform(String p){
        platform = p;
    }

    String getPlatform(){
        return platform;
    }

    void setMemory(Integer m){
        memory = m;
    }

    Integer getMemory(){
        return memory;
    }
}

我试图完成的是这样的事情(基本想法)。

Object var = mapper.get("NS01");    
System.out.println(var.getMemory());

我是不是走错了路?任何帮助是赞赏的,谢谢。


答案 1

问题是您的代码仅指定映射中的值为 。您知道的不止于此,因此请告诉编译器该信息:Object

HashMap<String, InfoStor> mapper = new HashMap<String, InfoStor>();
mapper.put("NS01", new InfoStor("NS01"));
...

InfoStor value = mapper.get("NS01");
Integer memory = value.getMemory();

请注意,对变量类型使用接口通常(尽管并不总是更好)- 您可以使用菱形运算符进行构造函数调用,让编译器使用类型推断来填充类型参数:

Map<String, InfoStor> mapper = new HashMap<>();
mapper.put("NS01", new InfoStor("NS01"));
...

InfoStor value = mapper.get("NS01");
Integer memory = value.getMemory();

答案 2

如果您像这样声明哈希映射:

HashMap<String, InfoStor> mapper = new HashMap<String, InfoStor>();

然后,当您从映射器中获取对象时,它将是的实例(您不需要强制转换它或担心类强制转换异常,因为它不是 rist 类。InfoStor

所以:

InfoStor myStor = mapper.get("somekey");
myStor.getMemory(); // this will work

否则,如果您坚持使用原始代码中使用的代码,则需要在调用该方法之前对其进行强制转换:HashMap<String, Object>

Object obj = mapper.get("somekey");
((InfoStor)obj).getMemory(); // cast is required
obj.getMemory(); // this will not compile

您应该阅读 Java 泛型。