获取字符串时出现 ConcurrentModificationException
ConcurrentModificationException when getting strings
对于我正在编写的 bukkit 插件,我需要从文件中获取所有播放器权限,我不想要以“-”开头的权限,因为它们是在另一种方法中调用的(权限将从播放器中删除) 但我在 for(String perms : s){
处收到 ConcurrentModificationException 异常
public static List<String> getPerms(Player player){
File f = new File(ServerCore.getPlugin().getDataFolder(), "permissions.yml");
FileConfiguration rankData = YamlConfiguration.loadConfiguration(f);
List<String> s = rankData.getStringList("Permissions.ranks."+ getPlayerRank(player) + ".permissions");
for(String ss : getInheritance(player)){
try{
List<String> sss = rankData.getStringList("Permissions.ranks." + ss + ".permissions");
s.addAll(sss);
}catch(Exception e){
e.printStackTrace();
}
}
List<String> results = s;
for(String perms : s){
if(!perms.startsWith("-")){
results.add(perms);
}
}
return results;
}
List<String> results = s;
您正在迭代的列表 "s" 与您要向其中添加元素的 "results" 是同一个列表。使用快速失败迭代器修改集合(大多数非并发集合),同时迭代它会抛出该异常。
根据上下文,我假设您真正想要的是
List<String> results = new ArrayList();
克隆原始列表,然后使用它。否则您正在修改相同的引用,因此会出现异常。
对于我正在编写的 bukkit 插件,我需要从文件中获取所有播放器权限,我不想要以“-”开头的权限,因为它们是在另一种方法中调用的(权限将从播放器中删除) 但我在 for(String perms : s){
处收到 ConcurrentModificationException 异常public static List<String> getPerms(Player player){
File f = new File(ServerCore.getPlugin().getDataFolder(), "permissions.yml");
FileConfiguration rankData = YamlConfiguration.loadConfiguration(f);
List<String> s = rankData.getStringList("Permissions.ranks."+ getPlayerRank(player) + ".permissions");
for(String ss : getInheritance(player)){
try{
List<String> sss = rankData.getStringList("Permissions.ranks." + ss + ".permissions");
s.addAll(sss);
}catch(Exception e){
e.printStackTrace();
}
}
List<String> results = s;
for(String perms : s){
if(!perms.startsWith("-")){
results.add(perms);
}
}
return results;
}
List<String> results = s;
您正在迭代的列表 "s" 与您要向其中添加元素的 "results" 是同一个列表。使用快速失败迭代器修改集合(大多数非并发集合),同时迭代它会抛出该异常。
根据上下文,我假设您真正想要的是
List<String> results = new ArrayList();
克隆原始列表,然后使用它。否则您正在修改相同的引用,因此会出现异常。