Проблемы с доступом к объектам метода фабрики в HashMap - PullRequest
0 голосов
/ 20 декабря 2018

У меня проблемы с компилятором из-за синтаксиса, и я хочу, чтобы этот метод работал с Hashmap объектом myMap.Мне нужен метод Add, чтобы взять значение String и использовать функцию Hashmap put для добавления пары (ключ, значение).

Я пытался поставить заводской метод инициализации newMap внутри main и были проблемы с доступом.

 import java.util.*;

  public class MyMap {

  public static String item;
  public static String brand;

  Map<String, String> myMap = newMap();

   public static void main(String[] args) {

    myMap.Add("apple");   

   }

   public static HashMap<String, String> newMap() {
   return new HashMap<>(); 
    } 

   public static void Add(String item)  {
    String brand = "nobrand";
    myMap.put(item, brand);
  }   


}

Ошибка компиляции из-за статических / нестатических элементов.Я сделал их статичными, чтобы все было доступно в классе.

Ответы [ 2 ]

0 голосов
/ 20 декабря 2018

Я согласен со всеми ответами Spara

Я хотел бы помочь немного больше

import java.util.HashMap;
import java.util.Map;

public class MyMap {

    /**
    * item - brand Map
    */
    private Map<String, String> myMap;

    /**
    * constructor
    */
    public MyMap() {
        this.myMap = new HashMap<>();
    }

    /**
    * add item with default brand - nobrand
    * I think function: void addItem (String item, String brand) is better
    * @param item
    */
    public void addItem(String item) {
        final String brand = "nobrand";
        this.myMap.put(item, brand);
    }

    /**
    * get brand by item
    * @param item
    * @return brand or null if there is no item in myMap
    */
    public String getBrandByItem(String item) {
        return this.myMap.get(item);
    }

    /**
    * This is using for testing MyMap class
    * @param args
    */
    public static void main(String[] args) {

        // initialisation MyMap - final is my habit :)
        final MyMap myMap = new MyMap();

        // add apple with default nobrand
        myMap.addItem("apple");

        // assert that your brand item is nobrand
        System.out.println(myMap.getBrandByItem("apple"));

        // output is : `nobrand`
    }
}
0 голосов
/ 20 декабря 2018

У вас есть две ошибки:

Сначала вы должны сделать myMap статическим, как это:

static Map<String, String> myMap = newMap();

Во-вторых, вы должны изменить myMap.Add("apple"); на Add("apple");, потому что вы пишете методдля основного класса не для HashMap, который вы ожидаете назвать так, а также метод Add является статическим и имеет доступ к myMap.

Общий класс будет выглядеть так:

import java.util.HashMap;
import java.util.Map;

public class Test {

    public static String item;
    public static String brand;

    static Map<String, String> myMap = newMap();

    public static void main(String[] args) {

        Add("apple");

    }

    public static HashMap<String, String> newMap() {
        return new HashMap<>();
    }

    public static void Add(String item) {
        String brand = "nobrand";
        myMap.put(item, brand);
    }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...