Создать Java-класс с переменной (arrayList) того же класса - PullRequest
0 голосов
/ 20 января 2012

Здравствуйте, я хотел бы создать класс, который содержит массив с тем же классом.

Я пытался использовать код, указанный ниже, но созданный мной массив был бесконечным.

public class State {

private String Valor1;
private String Valor2;
private ArrayList arrayStatesAnteriores;

}

И я сделал набор и получил с рефактором netbeans

state.setArrayStatesAnteriores(arrayStateAnteriores);

Но у меня проблема с массивом, который бесконечен.Есть идеи?

Ответы [ 3 ]

2 голосов
/ 20 января 2012

Прежде всего, всего несколько твиков в вашем коде:

  • ArrayList просто реализует интерфейс List.Вам не нужно использовать его при определении поля члена.
  • Вы должны определить тип элементов списка, см. Обобщенные элементы в Java: http://docs.oracle.com/javase/tutorial/java/generics/index.html

, чтобыbe

public class State {

    private String Valor1;
    private String Valor2;
    private List<State> arrayStatesAnteriores;



}

А что касается вашего вопроса, что вы подразумеваете под "массив бесконечен"?Вы имеете в виду, что это null после того, как вы установили его?

state.setArrayStatesAnteriores(arrayStateAnteriores);

причина этого может заключаться в том, что вы устанавливаете для себя значение списка, равное нулю.

попробуйте что-то вроде этого:

state.setArrayStatesAnteriores(new ArrayList<State>());
2 голосов
/ 20 января 2012

Вот способ Я понимаю : у вас есть класс, который представляет состояние программы в данный момент, и вы хотите сохранить список состояния, в котором находилась программа, вот почему это бесконечный список.

Сначала класс State, который имеет два поля value1 и value2, один конструктор, который устанавливает два поля для переданных значений:

public class State {

    /**
     * This is the constructor 
    */
    public State(String value1, String value2){
        this.value1 = value1;
        this.value2 = value2;
    }

    // Omiting getters/setters for brevety.
    // This will be set by the constructor using the values that it
    // receives as arguments 
    // e.g
    // new State("My Val1","My Val2");
    private String value1;
    private String value2;
}

Тогда этот класс будет содержаться в массиве States

List<State> states =  new ArrayList<States>();

Тогда вы будете использовать эти классы в вашем основном или других классах:

import State;
public class Program {

    // This array holds the states that the program has had.
    private static List<State> states =  new ArrayList<State>();
    public static void main(String[] args){
        // ...
        // Do something
        // ...

        // Save the states
        states.add(new State("State 1","Value 1"))
        // Save another state
        states.add(new State("State 2","Value 2"))
        // The arraylist  now contains two states of the program.
    }

}

Надеюсь, это поможет вам задать больше вопросов.

2 голосов
/ 20 января 2012

Используйте List и инициализируйте it:

public class State {
  private List<State> statesAnteriores = new ArrayList<State>();
}
...