Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/395.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java HashMap中的factory方法对象存在访问问题_Java_Methods_Hashmap - Fatal编程技术网

Java HashMap中的factory方法对象存在访问问题

Java HashMap中的factory方法对象存在访问问题,java,methods,hashmap,Java,Methods,Hashmap,我的语法有编译器问题,希望此方法在Hashmap对象myMap上工作。我需要Add方法获取String值,并使用Hashmapput函数添加(键、值)对 我试图将newMap的工厂方法初始化放在main中,但遇到了访问问题 import java.util.*; public class MyMap { public static String item; public static String brand; Map<String, String> myMa

我的语法有编译器问题,希望此方法在
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);
  }   


}
import java.util.*;
公共类MyMap{
公共静态字符串项;
公共静态串品牌;
Map myMap=newMap();
公共静态void main(字符串[]args){
myMap.Add(“苹果”);
}
公共静态HashMap newMap(){
返回新的HashMap();
} 
公共静态无效添加(字符串项){
字符串brand=“nobrand”;
myMap.put(项目、品牌);
}   
}
静态/非静态项导致的编译错误。我将它们全部设置为静态,以便在整个课堂上访问所有内容。

您有两个错误:

首先,您应该将
myMap
设置为静态,如下所示:

static Map<String, String> myMap = newMap();
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);
    }

}

我完全同意你的回答

我想多给点帮助

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`
    }
}
import java.util.HashMap;
导入java.util.Map;
公共类MyMap{
/**
*项目-品牌地图
*/
私人地图myMap;
/**
*建造师
*/
公共MyMap(){
this.myMap=newhashmap();
}
/**
*添加具有默认品牌-nobrand的项目
*我认为功能:void addItem(字符串项,字符串品牌)更好
*@param项目
*/
公共无效附加项(字符串项){
最终字符串brand=“nobrand”;
this.myMap.put(项目、品牌);
}
/**
*按项目获取品牌
*@param项目
*@return brand或null(如果myMap中没有项目)
*/
公共字符串getBrandByItem(字符串项){
返回此.myMap.get(项目);
}
/**
*这是用于测试MyMap类的
*@param args
*/
公共静态void main(字符串[]args){
//初始化MyMap-最终版是我的习惯:)
final MyMap MyMap=新建MyMap();
//添加带有默认nobrand的apple
myMap.addItem(“苹果”);
//断言您的品牌商品是nobrand
System.out.println(myMap.getBrandByItem(“苹果”);
//输出为:`nobrand`
}
}

静态映射myMap
?看起来您遇到了许多java初学者遇到的一个问题:
静态
关键字的真正含义。对于这个概念,场外教程可能是一个更好的资源。我的研究告诉我,静态使类可以访问该项,而不仅仅是类的实例。@CodeNewb,您尝试从
add
的静态上下文访问非静态
myMap
,我仍然得到一个编译错误:非静态方法无法从静态上下文Add(“苹果”)引用Add(字符串);我在Add函数中去掉了static关键字declaration@CodeNewb好的,我将为您添加总类并检查它