我在语法上遇到编译器问题,希望此方法在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);
}
}
由于静态/非静态项目而导致的编译错误。我将它们全部设置为静态,以使全班均可访问。
答案 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`
}
}