Java:HashSet复制最后一个值

时间:2013-11-16 17:40:18

标签: java bukkit

由于某种原因,我放入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

1 个答案:

答案 0 :(得分:3)

鉴于此代码:

Arena.name = name;

...看起来你的name变量是静态的。 (对于其他一些变量也是如此。)

这意味着,不是每个Arena实例都有一个单独的名称,而是有一个与该类型本身相关联的单个变量。你几乎肯定想要实例变量而不是静态变量,所以你要使用:

this.name = name;

(等)在你的构造函数中。有关详细信息,请参阅Variables page in the Java Tutorial