这是我的代码。我的目的是创建一个具有 4 个值的哈希图,然后将此类导出为 jar,将其添加到另一个项目中,并在那里使用哈希映射值。
我在所有"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;
}
}
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;
}
}
上面的代码将帮助您获得所需的结果。您还应该注意,您不能直接在类中使用实例变量。 您只能使用该 INSIDE 方法。
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
有多种方法可以做到这一点。最简单的方法是在 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;
}
}
你应该向你的类添加一个构造函数:
public MyFirstClass() {
this.hmap = new HashMap<Integer,String>();
// you can do .put here if you wish
}
并将hmap
字段更改为:
private HashMap<Integer, String> hmap;
您正在使用方法之外的方法。您不能在类内调用 Hashmap.put ,而是在方法外部调用 - 如前所述,您希望在类的构造函数中执行此操作
public class MyFirstClass {
public MyFirstClass() { //put it here }
}
你可以把它放在一个静态块中,就像:
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");
}
};