HashMap中的工厂方法对象有访问问题

时间:2018-12-19 22:45:34

标签: java methods hashmap

我在语法上遇到编译器问题,希望此方法在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 :(得分:4)

您有两个错误:

首先,您应像这样将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);
    }

}

答案 1 :(得分:0)

我同意所有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`
    }
}