Java - 从另一个 class 更改数组列表

Java - changing an arraylist from another class

因此,我制作了一个 public 数组列表,我需要从另一个 class 进行更改。 shielded 是一个数组列表,它将 UUID 存储为每个已打开盾牌的玩家的字符串。此代码不会影响 class 中的数组,但仍然允许我在 class.

中切换它

在Class3中访问后,使用if (vars.shielded.contains(otherPlayer.getUniqueId().toString())) {,总是returnsfalse,数组中没有播放器UUID。

Class一个:

public class ClassOne {
    
    public ArrayList<String> shielded = new ArrayList<String>();
    
    public void addItem(String item) {
        this.shielded.add(item);
    }
    
    public void removeItem(String item) {
        this.shielded.remove(item);
    }
}

Class 两个(片段):

ClassOne vars = new ClassOne();

... 

if(vars.global.shielded.contains(p.getUniqueId().toString())) {
    vars.removeItem(p.getUniqueId().toString());
    p.sendMessage("You are NOT in the list");
}
else {
    vars.addItem(p.getUniqueId().toString());
    p.sendMessage("You're in the list.");
}

对我来说,您正在为每个方法调用创建 ClassOne 的新实例。

您可以创建一个实例并将其放在静态字段中。如果您在多个 class 中使用此实例,这是一个好方法。为此,只需使用 public static ClassOne vars = new ClassOne();.

此外,如果您只使用一个 class(或需要不同 class 的多个实例),我建议您这样做:

public ClassOne vars; // declare variable

public ClassTwo() {
   vars = new ClassOne(); // create a new instance
}

public void yourMethod() {
   if(vars.contains(myUUID)) {
       // should contains
   } else {
       // should not contains
   }
}

将 ClassOne 中的 ArrayList 设为静态。

“vars.global.shielded.contains...”中的“全局”是否正确?

if(vars.global.shielded.contains(p.getUniqueId().toString())) {
vars.removeItem(p.getUniqueId().toString());
p.sendMessage("You are NOT in the list");
}

也许您应该将其替换为以下代码片段。

if(vars.shielded.contains(p.getUniqueId().toString())) {
vars.removeItem(p.getUniqueId().toString());
p.sendMessage("You are NOT in the list");
}