Вы переопределяете переменную вашего класса локальной переменной с тем же именем. Либо инициализируйте список напрямую
private List<Candidate> ballot = new Arraylist<>();
, либо инициализируйте его в конструкторе с помощью
ballot = new ArrayList<>();
К вашему сведению: вам не следует назначать классы реализации для ваших локальных переменных и возвращать значения, если вы можете помочь Это. «ballot» должен быть просто интерфейсом List, как и получатель. Таким образом, если вы когда-нибудь захотите изменить реализацию, вам не нужно менять все. Это может быть ArrayList, LinkedList, Stack, Vector и т. Д. c, и это не имеет значения, поскольку все они используют интерфейс List.