我试图找到一种方法来存储类的新实例作为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").
    }
}

InfoStor.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());

我会以错误的方式处理吗?任何帮助表示赞赏,谢谢。

最佳答案

问题在于您的代码仅指定映射中的值为Object。您不仅仅知道这些,所以请告诉编译器以下信息:

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

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

请注意,对于变量类型使用接口(interface)通常并不总是更好-并且您可以对构造函数调用使用菱形运算符,让编译器使用类型推断来填充类型参数:
Map<String, InfoStor> mapper = new HashMap<>();
mapper.put("NS01", new InfoStor("NS01"));
...

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

10-08 08:26