Java提示HashMap的put、get方法不存在的原因是什么?
你遇到的语法错误核心原因是Java语法规定可执行语句不能直接放置在类的成员定义区域,仅能写在方法、构造方法、代码块三类结构内部。你代码中所有的map.put()、map.get()调用都属于可执行语句,直接写在类体中不符合语法规范,因此编译器会抛出不符合预期的语法提示。
正确的写法可以将HashMap初始化逻辑放入构造方法、main方法或代码块中,参考修正后的可运行代码如下:
import java.util.*; @SuppressWarnings("unchecked") public class HashMapForFinal { // 类成员区域仅允许定义变量、初始化成员属性 public HashMap<String, HashMap<Integer, Integer>> map = new HashMap<>(); Random rand = new Random(); int randomInt = rand.nextInt(7); // 将初始化逻辑放入构造方法,类实例化时自动执行 public HashMapForFinal() { map.put("correct", new HashMap<>()); map.get("correct").put(1, 1); map.get("correct").put(2, 2); map.get("correct").put(3, 3); map.get("correct").put(4, 4); map.get("correct").put(5, 5); map.get("correct").put(6, 6); map.put("incorrect1", new HashMap<>()); map.get("incorrect1").put(1, 6); map.get("incorrect1").put(2, 5); map.get("incorrect1").put(3, 4); map.get("incorrect1").put(4, 3); map.get("incorrect1").put(5, 2); map.get("incorrect1").put(6, 1); map.put("incorrect2", new HashMap<>()); map.get("incorrect2").put(1, randomInt); map.get("incorrect2").put(2, randomInt); map.get("incorrect2").put(3, randomInt); map.get("incorrect2").put(4, randomInt); map.get("incorrect2").put(5, randomInt); map.get("incorrect2").put(6, randomInt); } // 测试运行入口 public static void main(String[] args) { HashMapForFinal projectInstance = new HashMapForFinal(); // 测试功能是否正常 System.out.println("correct分组key=3的值:" + projectInstance.map.get("correct").get(3)); System.out.println("incorrect1分组key=3的值:" + projectInstance.map.get("incorrect1").get(3)); System.out.println("incorrect2分组的随机值:" + projectInstance.map.get("incorrect2").get(1)); } }
如果不需要复用初始化逻辑,也可以选择把所有可执行语句直接写到main方法内部,或是用大括号包裹原来的可执行语句做成非静态初始化块,都可以解决语法报错问题。
内容的提问来源于stack exchange,提问作者Alec Kranig
相关产品推荐
相关产品推荐

