#java #hashmap
#Ява #хэш-карта
Вопрос:
Я пытаюсь вызвать значения хэш-карты из другого метода. Мне нужно, чтобы значения 1, "Twin", 200, 200
были напечатаны вместо "YES"
того, когда TW
был вызван ref
. Однако имейте в виду, что я должен уйти setupMuseum
как private
. Я пробовал разные подходы, но каждый раз заканчивался ошибкой.
private void setupMuseum() { HashMaplt;String, MUSEUMgt;Museum= new HashMaplt;String, MUSEUMgt;(); Museum.put("TW", new MUSEUM(1, "Twin", 200, 200)); }
public String getMuseumDetails(String ref) { if ("TW".equals(ref) ){ System.out.println("YES"); }else return "!"; return "nNo such thing"; }
Ответ №1:
Ваш setupMuseum()
метод и так бесполезен. Он создает Map
значение, которое даже не возвращается и которое также не является переменной экземпляра. Вам нужно вернуть созданное Map
, а затем вы можете распечатать все, что там есть:
private Maplt;String, MUSEUMgt; setupMuseum() { HashMaplt;String, MUSEUMgt; Museum = new HashMaplt;String, MUSEUMgt;(); Museum.put("TW", new MUSEUM(1, "Twin", 200, 200)); return Museum; }
Затем в вашем getMuseumDetails()
методе вам нужно вызвать setupMuseum()
и распечатать значения:
public String getMuseumDetails(String ref) { if ("TW".equals(ref) ){ HashMaplt;String, MUSEUMgt; museum = getMuseumDetails(); System.out.println(museum.get("TW")); } else { return "!"; } return "nNo such thing"; // This is unreachable }
Это предполагает, что оба метода находятся в одном файле, так что setupMuseum()
их можно найти внутри getMuseumDetails()
. Это также предполагает, что ваш MUSEUM
класс имеет соответствующую toString()
реализацию, которая фактически включает все его свойства.
В качестве дополнительных замечаний, пожалуйста, имейте в виду следующее:
- Обычно переменные в Java следуют за snakeCase, поэтому вам следует назвать
Museum
какmuseum
. - Классы Java не должны иметь названия в верхнем регистре, поэтому вы должны называть
MUSEUM
их какMuseum
. - Вы должны стремиться использовать интерфейсы Java вместо конкретных реализаций. Это означает, что вы должны использовать
Maplt;String, MUSEUMgt; Museum = new HashMaplt;String, MUSEUMgt;();
вместоHashMaplt;String, MUSEUMgt; Museum = new HashMaplt;String, MUSEUMgt;();
того, чтобы объявлять переменную как aMap
(интерфейс), а не как aHashMap
(конкретная реализация).