无法添加到ArrayList"misplaced construct(s)"

Ada*_*zak 3 java string arraylist

我有一个简单的arraylist设置,但我似乎无法添加对象.

import java.util.ArrayList;


public class Inventory {

ArrayList inventory = new ArrayList();

String item1 = "Sword";
String item2 = "Potion";
String item3 = "Shield";

inventory.add(item1);
inventory.add(item2);
inventory.add(item3);
}
Run Code Online (Sandbox Code Playgroud)

有两个错误,一个在库存和添加之间的点,一个在括号之间的变量名称,是

Syntax error on token(s), misplaced construct(s)
Run Code Online (Sandbox Code Playgroud)

Syntax error on token "item1", VariableDeclaratorId expected after this token
Run Code Online (Sandbox Code Playgroud)

任何人都可以解释为什么会这样吗?

dar*_*jan 12

你的代码不起作用的原因是你试图在类体中编写代码.可执行语句应该用静态初始化器,方法或构造函数编写(就像我在下面的例子中所做的那样).

试试这个:

public class Inventory {

    private List inventory = new ArrayList();

    public Inventory() {

        String item1 = "Sword";
        String item2 = "Potion";
        String item3 = "Shield";

        inventory.add(item1);
        inventory.add(item2);
        inventory.add(item3);
    }
}
Run Code Online (Sandbox Code Playgroud)

inventory在类体中定义了类成员并将其初始化为in-place(= new ArrayList();).没有编译器错误,因为在类体中允许声明.我将其他代码放入将inventory使用值初始化的构造函数中.我可以把它放在一个方法中,但我选择了构造函数,因为它通常的作用是初始化类成员.

  • 您可能需要在显示工作代码旁边进行解释.解释一下,我的中立投票将成为+1. (2认同)

das*_*ght 6

在Java中,add除了方法或构造函数的定义之外,您不能拥有可执行语句,例如方法的调用.声明没问题,但可执行语句不行.

您可以将这些项添加到命名构造函数,但您也可以使用匿名初始化块,如下所示:

public class Inventory {

    ArrayList inventory = new ArrayList();

    {   // An anonymous initialization block
        String item1 = "Sword";
        String item2 = "Potion";
        String item3 = "Shield";

        inventory.add(item1);
        inventory.add(item2);
        inventory.add(item3);
    }
}
Run Code Online (Sandbox Code Playgroud)

如果你使用这样的块,它将在类的所有命名构造函数之间共享,或者它将成为隐式生成的构造函数的一部分Inventory.


Mik*_*378 5

你的"添加"语句只是"在空中":不在一个方法或构造函数中.

例如,在内部包裹:

public class Inventory {

   private List inventory = new ArrayList();  //prefer interface here ;)

   public Inventory(){   //statements wrap into this constructor
      inventory.add("Sword");
      inventory.add("Potion");
      inventory.add("Shield");
   }
}
Run Code Online (Sandbox Code Playgroud)