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;