Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 向ArrayList添加两个类<;类别>;用两个副本填充arraylist_Java_Class_Arraylist_Bukkit_Generic List - Fatal编程技术网

Java 向ArrayList添加两个类<;类别>;用两个副本填充arraylist

Java 向ArrayList添加两个类<;类别>;用两个副本填充arraylist,java,class,arraylist,bukkit,generic-list,Java,Class,Arraylist,Bukkit,Generic List,我制作了一个名为ArrayList的ArrayList,之所以发生这种情况,是因为您没有正确使用对象 据我所知,您的代码需要创建某种竞技场,为该竞技场分配一些值,然后将其添加到某个竞技场管理器中。这很好。为了做到这一点,您需要使用实例变量,因此每个创建的竞技场都有自己的名称。特定实例的唯一性 您在这里使用的是静态字段-程序中所有对象的静态字段都是相同的,这不是您在这里需要的(如果您需要类似Arena counter的内容,这将是有益的) 请参见一些示例: 想象一下有一个非常简单和天真的Perso

我制作了一个名为
ArrayList

的ArrayList,之所以发生这种情况,是因为您没有正确使用对象

据我所知,您的代码需要创建某种竞技场,为该竞技场分配一些值,然后将其添加到某个竞技场管理器中。这很好。为了做到这一点,您需要使用实例变量,因此每个创建的竞技场都有自己的名称。特定实例的唯一性

您在这里使用的是静态字段-程序中所有对象的静态字段都是相同的,这不是您在这里需要的(如果您需要类似Arena counter的内容,这将是有益的)

请参见一些示例:

想象一下有一个非常简单和天真的Person类(遵循您的方法)

如果您想做如下操作: 新人(“亚当”); 新人(“维克多”)

您将以两个person实例结束,这些实例(指向)一个静态变量,该变量最终将具有值Victor。这肯定不是我们需要的。为了使其正常工作,您需要使用实例变量:

public class Person {
    private String name;
    public Person(String name) {
        this.name = name;
    }
}
现在,在我们的示例代码之后,您将有两个人,每个人都有不同的名字。如何访问它们并不重要,这里真正重要的是它们应该是实例字段——这意味着每个实例在内存中都有单独的块来保存这个值。如果字段是静态的,则表示所有不同对象都有一个可能的变量值-每次更改时,所有其他对象的变量值都会更改

综上所述:

您应该使用实例字段,而不是静态字段

在构造函数中,您有: Arena.name=名称; Arena.layout=“默认”

这两行代码总是覆盖Arena类中的静态字段

在竞技场类中,您有类似(注意静态关键字):

您需要:

private String name; 
因此,每个实例都有自己的名称。请阅读有关实例和静态字段的内容,这将使其更容易理解!以下是Java教程中的示例文档:
本教程将很好地涵盖这一切

我不太清楚你在这里的意思。你是说我不应该在我的类中使用任何静态字段,而应该使用方法来访问它们吗?我可以详细说明一下我的答案。通常,静态字段在对象的所有实例中都是相同的。这里您需要的是实例字段——毕竟您在构造函数中赋值,这将提示您需要它们具有不同的属性。您在这里所做的是在所有竞技场实例中使用相同的名称,这显然不是您想要的。让我在我的答案中添加一些例子:)修改后的答案,再加上一些解释和文字。让我知道,如果这是一个更清晰的现在!我建议大家看一下Java教程,这对解释这类东西很有帮助。是的,谢谢,我现在明白了。你的评论真的很有帮助。帮我省去了很多压力!请接受我的回答,这样会得到一些声誉!不客气
public static void addToArenaList(Arena a) {
    all.add(a);
    checkArena(a);
}

public static void checkArena(final Arena a) {
    Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() {
        public void run() {
            if (!(all.contains(a))) {
                Bukkit.getServer().getConsoleSender().sendMessage(
                        ChatColor.LIGHT_PURPLE + "[" + plugin.getPdfFile().getName() + "]" + ChatColor.RED
                                + " [E] (Error while adding arena " + a.getArenaName() + "to list)");
            } else {
                Boolean found = false;
                for (Arena f : all) {
                    if (f.getArenaName().equals(a.getArenaName())) {
                        if (found == true) {
                            Bukkit.getServer().getConsoleSender()
                                    .sendMessage(ChatColor.LIGHT_PURPLE + "[" + plugin.getPdfFile().getName() + "]"
                                            + ChatColor.RED + " [E] (Duplicate found with arena "
                                            + a.getArenaName());
                            continue;
                        }
                        found = true;
                    }
                }
                if (found == false) {
                    Bukkit.getServer().getConsoleSender()
                            .sendMessage(ChatColor.LIGHT_PURPLE + "[" + plugin.getPdfFile().getName() + "]"
                                    + ChatColor.RED + " [E] (Error while adding arena " + a.getArenaName()
                                    + "to list)");
                }
            }
        }
    }, 10L);
}
public void onEnable() {
    Methods.sendColoredMessage(this, ChatColor.LIGHT_PURPLE, ("Registering Commands...."), ChatColor.YELLOW);
    registerCommands();
    Methods.sendColoredMessage(this, ChatColor.LIGHT_PURPLE, ("Registering Events...."), ChatColor.YELLOW);
    registerEvents();
    Methods.sendColoredMessage(this, ChatColor.LIGHT_PURPLE, ("Registering Config...."), ChatColor.YELLOW);
    createFiles();
    Methods.sendColoredMessage(this, ChatColor.LIGHT_PURPLE, ("Attempting to load arenas...."), ChatColor.GOLD);
    ArenaManager.all.clear();
    ArenaManager.arenaNames.clear();
    ArenaManager.createArenas();
    Methods.sendColoredMessage(this, ChatColor.AQUA,
            (pdfFile.getName() + " has been enabled! (V." + pdfFile.getVersion() + ")"), ChatColor.GREEN);
}
public static void createArenas() {
    if (plugin.getArenaConfig().getConfigurationSection("arenas") != null) {
        int count = 0;
        ArrayList<String> listed = new ArrayList<String>();
        for (String arena : plugin.getArenaConfig().getStringList("enabled")) {
            count++;
            Bukkit.getServer().getConsoleSender()
                    .sendMessage(ChatColor.LIGHT_PURPLE + "[" + plugin.getPdfFile().getName() + "]"
                            + ChatColor.GREEN + " [" + count + "] (Loading arena " + arena + ")");
            int min = plugin.getArenaConfig().getInt("arenas." + arena + ".min");
            int max = plugin.getArenaConfig().getInt("arenas." + arena + ".max");

            new Arena(arena, min, max);
        }
        Bukkit.getServer().getConsoleSender().sendMessage(ChatColor.LIGHT_PURPLE + "["
                + plugin.getPdfFile().getName() + "]" + ChatColor.GREEN + " [A] Loaded arenas are listed below:");
        for (Arena a : all) {
            if (listed.contains(a.getArenaName())) {
                continue;
            }
            Bukkit.getServer().getConsoleSender().sendMessage(ChatColor.LIGHT_PURPLE + "["
                    + plugin.getPdfFile().getName() + "]" + ChatColor.GREEN + " [A] - " + a.getArenaName());
            listed.add(a.getArenaName());
        }
    } else {
        Bukkit.getServer().getConsoleSender().sendMessage(ChatColor.LIGHT_PURPLE + "["
                + plugin.getPdfFile().getName() + "]" + ChatColor.RED + " [E] No arenas have been found!");
    }
}
public class Person {
    private static String name;
    public Person(String name) {
         Person.name = name;
    }
}
public class Person {
    private String name;
    public Person(String name) {
        this.name = name;
    }
}
private static String name;
private String name;