由于某种原因,我放入HashSet的所有条目都复制了最后一个条目(即使它们不同)。我不知道为什么会这样,并尝试了很多东西来解决它。
以下是将条目放入hashset的代码:
public Arena(String name) {
Arena.data = new ArrayList<PlayerData>();
Arena.name = name;
Arena.players = Integer.valueOf(Main.getPlugin().getConfig().getString("MaxUsers"));
Arena.MinPlayers = Integer.valueOf(Main.getPlugin().getConfig().getString("MinUsers"));
ConfigurationSection spawn = Main.getPlugin().getConfig().getConfigurationSection("Arenas."+name+".spawn");
spawnPoint = LocationUtil.locationFromConfig(spawn, true);
state = ArenaState.WAITING;
Arena.playerManager = new PlayerManager(this);
arenas.add(this);
}
这是实际获取要放入hashset的所有条目的代码。
public static void loadArenas() {
FileConfiguration fc = Main.getPlugin().getConfig();
for(String keys : fc.getConfigurationSection("Arenas").getKeys(false)){
Arena arena = new Arena(keys);
}
for(Player player : Bukkit.getOnlinePlayers()){
for(Arena arena : Arena.arenas) player.sendMessage(Bukkit.getServer().getPluginManager().getPlugin("PresidentAssassination").getConfig().getString("Prefix").replaceAll("(&([a-f0-9]))", "\u00A7$2") + ChatColor.RESET + " " + arena.getName());
}
}
非常感谢任何帮助。对不起凌乱的代码,我只有十二岁:P
答案 0 :(得分:3)
鉴于此代码:
Arena.name = name;
...看起来你的name
变量是静态的。 (对于其他一些变量也是如此。)
这意味着,不是每个Arena
实例都有一个单独的名称,而是有一个与该类型本身相关联的单个变量。你几乎肯定想要实例变量而不是静态变量,所以你要使用:
this.name = name;
(等)在你的构造函数中。有关详细信息,请参阅Variables page in the Java Tutorial。