如何在类级别添加ArrayList?

时间:2018-06-01 23:19:58

标签: java arraylist

我正在尝试创建一个DnD字符生成器,​​对于其中的一部分,我需要有一个可由其他方法编辑的统计信息列表,因此我尝试在类级别添加它。我目前的代码是:

public class CharacterCreator extends Application
{
    ArrayList<String> stats = new ArrayList<String>();

        stats.add("STR");
        stats.add("DEX");
        stats.add("CON");
        stats.add("INT");
        stats.add("WIS");
        stats.add("CHA");

public void start(Stage primaryStage)
{

但是当我尝试运行它时,我在每个“添加”行都会出现“标识符预期”错误。

5 个答案:

答案 0 :(得分:5)

您可以像这样初始化ArrayList

ArrayList<String> stats = new ArrayList<>(Arrays.asList("STR", "DEX"));

this answer所示。或者,只需将add调用放在方法或构造函数中,如下所示:

ArrayList<String> stats = new ArrayList<>();

// Adding to ArrayList inside a constructor
public CharacterCreator()
{
    stats.add("STR");
    stats.add("DEX");
}

答案 1 :(得分:3)

你不能在类体中有这样的裸言论。您需要在方法,构造函数或初始化块中填充数组:

public class CharacterCreator extends Application{
    ArrayList<String> stats;

    public CharacterCreator() {
         stats = new ArrayList<String>();
         stats.add("STR");
         stats.add("DEX");
         stats.add("CON");
         stats.add("INT");
         stats.add("WIS");
         stats.add("CHA");
    }
}

如果要在类级别而不是对象级别定义统计信息,则需要添加静态初始化块:

public class CharacterCreator extends Application{
    static ArrayList<String> stats;

    static {
         stats = new ArrayList<String>();
         stats.add("STR");
         stats.add("DEX");
         stats.add("CON");
         stats.add("INT");
         stats.add("WIS");
         stats.add("CHA");
    }
}

答案 2 :(得分:2)

初始化块怎么样?

class Reservation < ApplicationRecord
  around_save :check_for_race_condition

  def check_for_race_condition
    seat_count = Reservation.where(date: date, arrival_time: arrival_time).count
    begin
      self.seat_number = seat_count + 1
      yield
    rescue ActiveRecord::RecordNotUnique
      if seat_count + 1 >= ReservationMax.for(date, arrival_time)
        errors.add(:arrival_time, "This time is not available")
      else
        seat_count += 1
        retry
      end
    end
  end
end

答案 3 :(得分:0)

正如@shmosel所说,你不能在方法之外运行语句。您可以创建初始化方法并在构造函数中调用它或将指令移动到构造函数中。添加方法被认为是未知的,因此无法解决

答案 4 :(得分:0)

在声明课程时,您无法调用/** * @return $this * @throws Exception */ public function markCompleted(){ if($this->canDoAction('complete')){ $this->completed_at = Carbon::now(); } return $this; } 方法。在构造函数中使用add()块或调用方法。

static