Java непроверенное исключение

Может кто-нибудь сказать мне, почему этот метод вызывает непроверенное или небезопасное исключение? Я понял, что это происходит, когда я пытаюсь отредактировать список, который я перебираю... в приведенном ниже, currentAdvanceTactics и т. Д. Вообще не перебираются.

    public void tacticMeetsRequirements(ArrayList<Tactics> master) {

        for (Tactics a : master) {
            if (meetsrequirements(a)) {
                if (a.movement.equals("Advance")) {
                currentAdvanceTactics.add(a);                   
                } else if (a.movement.equals("Retreat")) {
                currentRetreatTactics.add(a);   
                } else if (a.movement.equals("Guard")) {
                currentGuardTactics.add(a); 
                }
            }       
        }

    }

Вот как создаются объекты, используемые в основном списке:

    for (int b = 0; b < numberoftactics; b++) {
         tactic[b] = new Tactics(parsedTactics[b]); 
         tacticsMaster.add(tactic[b]);
    }

parsedTactics - это просто необработанные данные, которые считываются в различные переменные.

tacticsMaster объявлен так:

public ArrayList<Tactics> tacticsMaster;

потом, когда я создаю объект, он содержится внутри:

this.tacticsMaster = new ArrayList<Tactics>();

Список currentAdvanceTactics и т. Д. Все создаются так:

    public ArrayList currentGuardTactics = new ArrayList<Tactics>();
    public ArrayList currentAdvanceTactics = new ArrayList<Tactics>();
    public ArrayList currentRetreatTactics = new ArrayList<Tactics>();

Заранее благодарю за любую помощь!

2 ответа

Решение

Вы используете сырую версию универсального типа (ArrayList<T>). Вот почему вы получаете предупреждение.

public ArrayList currentGuardTactics = new ArrayList<Tactics>();
public ArrayList currentAdvanceTactics = new ArrayList<Tactics>();
public ArrayList currentRetreatTactics = new ArrayList<Tactics>();

Попробуйте использовать параметризованную версию -

public List<Tactics> currentGuardTactics = new ArrayList<Tactics>();
public List<Tactics> currentAdvanceTactics = new ArrayList<Tactics>();
public List<Tactics> currentRetreatTactics = new ArrayList<Tactics>();

Декларация вашего ArrayLists не являются типобезопасными. Измените это на:

private ArrayList<Tactics> currentGuardTactics = new ArrayList<Tactics>();
private ArrayList<Tactics> currentAdvanceTactics = new ArrayList<Tactics>();
private ArrayList<Tactics> currentRetreatTactics = new ArrayList<Tactics>()

Вы должны сделать членов также private, public декларации, как правило, не лучший способ.

Другие вопросы по тегам