Подтвердить что ты не робот

Сохранение нового объекта в качестве значения хэш-карты?

Я пытаюсь найти способ хранения нового экземпляра класса в качестве значения в хэш-карте 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());

Неужели я ошибаюсь? Любая помощь приветствуется.

4b9b3361

Ответ 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>();

Затем, когда вы выберете объект из mapper, это будет экземпляр InfoStor (вам не нужно будет бросать его или беспокоиться о исключении класса, потому что это не класс rist.)

Итак:

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.

Ответ 3

Использовать дженерики, добавленные в java. Они помогают с проверкой типа времени компиляции, и они делают ненужными броски.

  HashMap <String, Object> mapper = new HashMap();
  //you will be able to retrieve an object and then cast it to your InfoStore
  InforStore isN01 = (InfoStore)mapper.get("N01");

  //this will unfortunately be accepted, even thought it a bug
  mapper.put("N02", new Integer(0));

  ________________________

  HashMap <String, InfoStore> mapper = new HashMap();
  //you will be able to retrieve an object and then cast it to your InfoStore
  InforStore isN01 = mapper.get("N01"); //no cast

Ответ 4

Вы на правильном пути...

Инициализируйте карту как:

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

Затем, после добавления объектов к карте, их можно найти с помощью:

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

Ответ 5

вы можете что-то приготовить с помощью массива... например, если вы можете хранить объекты в массивах, тогда используйте эту идею, чтобы достичь ее в хэш-карте... я не знаю, как вы разрабатываете, но я однажды застрял в этом и сделал через это

Пример...

классная принцесса {

int age;

public princess(int age){
    this.age=age;
}
public int getAge(){
    return this.age;
}

}

public class hashmaptest {

public static void main(String[] args) {
  princess[] p=new princess[10];
  HashMap scores = new HashMap();
  scores.put("a",new princess(6));
  scores.put("b",new princess(7));

  p[0]=(princess)scores.get("a");
   System.out.println(p[0].getAge());
  p[0]=null;
   p[0]=(princess)scores.get("b");

  System.out.println(p[0].getAge());



}

}