Использование ArrayLists в качестве статических свойств в классах? - PullRequest
1 голос
/ 08 января 2012

немного борется с чем-то. Я создал доказательство концепции и погуглил, но не могу найти причину.

  1. В настоящее время я пытаюсь использовать ArrayList в качестве статического свойства в классе для хранения серии записей. Единственная проблема заключается в том, что каждый раз, когда я пытаюсь добавить в массив Totalentries, я получаю nullPointerError.

Буду признателен за некоторые указания относительно того, где я иду не так?

Мой класс:

import java.util.ArrayList;


public class Competition {
private static ArrayList totalentries;

public Competition(){


}
public void newEntry(){
    totalentries.add("an Entry");
}

}

Мой тестовый код:

public class testEntries {

    /**
     * @param args
     */
    public static void main(String[] args) {
        Competition myComp=new Competition();
        myComp.newEntry(); //Null Pointer comes here!
        myComp.newEntry();
        myComp.newEntry();
        myComp.newEntry();
        myComp.newEntry();
        myComp.newEntry();

        myComp.toString();
    }

}

Ответы [ 4 ]

1 голос
/ 08 января 2012

Вы никогда не сделаете ArrayList.Попробуйте это:

private static ArrayList totalentries = new ArrayList();

, хотя было бы лучше использовать дженерики и обеспечить безопасность во время компиляции:

private static ArrayList<String> totalentries = new ArrayList<String>();

Поскольку этот список содержит свойства, вы не хотели бы, чтобы он был заменентак что было бы еще лучше, если бы вы определили это так:

private static final ArrayList<String> totalentries = new ArrayList<String>();

Действительно, однако, ни одна из этих идей не является хорошей идеей, потому что вы можете иметь несколько экземпляров вашего класса, изменяющих totalentries одновременновремя.Если это ваше намерение, что несколько Competition используют один статический totalentries для хранения, тогда вам лучше отслеживать эти данные в отдельном классе.

Если вы используете только один Competition затем удалите ключевое слово static.

1 голос
/ 08 января 2012

Вы никогда не создавали экземпляр totalentries в классе соревнования.

Вам понадобится что-то вроде:

private static ArrayList totalentries = new ArrayList();

Однако учтите, что я бы не советовал сохранять это "статичным".В противном случае каждое создаваемое вами «Соревнование» будет делиться одним и тем же списком записей, что, скорее всего, не то, что вам действительно нужно.

Кроме того, объявляйте ваши типы с помощью интерфейсов, чем создавайте экземпляры с типами.Вы также можете использовать Generics здесь.Так что даже лучше (и следуя стандартным соглашениям об именах):

private List<String> totalEntries = new ArrayList<String>();
0 голосов
/ 08 января 2012

Список должен быть создан до использования, попробуйте totalentries = new ArrayList ();

Вы должны также использовать List вместо переменной totalentries вместо этого, чтобы разрешить замену te ArrayList, например, на LinkedList.

0 голосов
/ 08 января 2012

totalentries не инициализируется и указывает на null. Сделай так:

private static List<String> totalentries = new ArrayList<String>();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...