将新对象存储为哈希图的值?
问题内容:
我试图找到一种方法来存储类的新实例作为Java哈希图中的值。这个想法是由Java讲师提供给我的,目的是创建一个可用于我正在开发的程序的数据存储结构。
他向我推荐的想法是使用一个存储计算机名称作为键的哈希映射,该值将是InfoStor.class类的新实例。InfoStor包含诸如getName(),setName(),getMemory()等方法。
我已经为基本测试设置了类和方法,以查看其是否有效。我遇到的问题是,一旦我在哈希图中创建了新条目,就无法弄清楚如何使用InfoStor内部的方法。
这是我到目前为止的代码;
VMware类
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();
请注意,对于变量类型使用接口 通常 并不总是更好-并且您可以对构造函数调用使用菱形运算符,让编译器使用类型推断来填充类型参数:
Map<String, InfoStor> mapper = new HashMap<>();
mapper.put("NS01", new InfoStor("NS01"));
...
InfoStor value = mapper.get("NS01");
Integer memory = value.getMemory();