这是我的代码。我的目的是创建一个包含4个值的hashmap,然后将该类导出为jar,将其添加到另一个项目,并在那里使用hashmap值。
我在所有“hmap.put”中收到错误。我无法理解我做错了什么。请帮忙。
import java.util.HashMap;
public class MyFirstClass {
private HashMap<Integer, String> hmap = new HashMap<Integer, String>();
hmap.put(2, "Jane");
hmap.put(4, "John");
hmap.put(3, "Klay");
hmap.put(1, "Deena");
public HashMap<Integer, String> gethmap()
{
return this.hmap;
}
public void sethmap(HashMap hmap)
{
this.hmap = hmap;
}
}
答案 0 :(得分:2)
Java不允许执行任何方法,字段初始化或静态块范围之外的任何语句 - 这就是您收到错误的原因。
我想,你的意图是用这四行做一些初始化。 Java支持这种类型的初始化 - 它是类构造函数。所以正确的代码如下所示:
import java.util.HashMap;
public class MyFirstClass {
private HashMap<Integer, String> hmap = new HashMap<Integer, String>();
// this is a constructor
public MyFirstClass() {
hmap.put(2, "Jane");
hmap.put(4, "John");
hmap.put(3, "Klay");
hmap.put(1, "Deena");
}
// here goes your other code
}
这样,使用new MyFirstClass()
创建的MyFirstClass的每个对象都将包含您在构造函数中放置的数据。
您可以在官方文档中阅读有关Java中构造函数的更多信息:https://docs.oracle.com/javase/tutorial/java/javaOO/constructors.html
答案 1 :(得分:2)
有多种方法可以做到这一点。最简单的方法是在put语句中添加括号:
import java.util.HashMap;
public class MyFirstClass {
private HashMap<Integer, String> hmap = new HashMap<Integer, String>();
{
hmap.put(2, "Jane");
hmap.put(4, "John");
hmap.put(3, "Klay");
hmap.put(1, "Deena");
}
public HashMap<Integer, String> gethmap() {
return this.hmap;
}
public void sethmap(HashMap hmap) {
this.hmap = hmap;
}
}
答案 2 :(得分:2)
import java.util.HashMap;
public class MyFirstClass {
private HashMap<Integer, String> hmap = new HashMap<Integer, String>() {
{
hmap.put(4, "John");
hmap.put(3, "Klay");
hmap.put(1, "Deena");
}
};
public HashMap<Integer, String> gethmap() {
return this.hmap;
}
public void sethmap(HashMap<Integer, String> hmap) {
this.hmap = hmap;
}
}
以上代码将帮助您获得所需的结果。您还应注意,您不能直接在类中使用实例变量。你必须只使用那个内部方法。
答案 3 :(得分:1)
您应该在班级中添加constructor:
public MyFirstClass() {
this.hmap = new HashMap<Integer,String>();
// you can do .put here if you wish
}
并将hmap
字段更改为:
private HashMap<Integer, String> hmap;
答案 4 :(得分:1)
您正在使用方法之外的方法。你不能在类中但在方法之外调用Hashmap.put - 如前所述,你想在类的构造函数中做到这一点
public class MyFirstClass {
public MyFirstClass() { //put it here }
}
答案 5 :(得分:1)
您可以将其放在静态块中,如下所示:
private static final Map<Integer, String> NAME_MAP = new HashMap<Integer, String>() {
private static final long serialVersionUID = 1L;
{
NAME_MAP.put(2, "Jane");
NAME_MAP.put(4, "John");
NAME_MAP.put(3, "Klay");
NAME_MAP.put(1, "Deena");
}
};