首先上错误代码
public static final Map<String, List<Home>> PLAYER_HOME = new Hashtable<>();
public static boolean addHome(Player player, String homeName) {
if (PLAYER_HOME.isEmpty() || !PLAYER_HOME.containsKey(player.getName())) {
PLAYER_HOME.put(player.getName(), List.of(new Home(homeName, player.getLocation())));
return true;
}
for (Home home : PLAYER_HOME.get(player.getName())) {
if (homeName.equals(home.getHomeName())) {
return false;
}
}
PLAYER_HOME.get(player.getName()).add(new Home(homeName, player.getLocation()));
HomeFiles.saveHomeData();
return true;
}
第一次调用不会报错,而第二次修改相同键值对时,就会报错 UnsupportedOperationException
问题出在 List.of(new Home(homeName, player.getLocation()))
上
通过 List.of
或 Arrays.asList
方法产生的 List 对象,其实是而是java.util.Arrays
类中的一个内部类,并不是正常的 java.util.ArrayList
类