Как добавить объекты в ArrayList в классе без переопределения предыдущих копий

#java #class #arraylist

#java #класс #arraylist

Вопрос:

Пытаюсь создать больше экземпляров cars, но когда я добавляю их в массив, они переопределяют предыдущие экземпляры, это потому, что ArrayList находится внутри каждого создаваемого мной экземпляра, было бы лучше создать класс inventory, в котором есть ArrayList для хранения всего?

 import java.util.ArrayList;

public class Automobile {

private String make;
private String color;
private int year;
private int mileage;
private ArrayList<Automobile> autoArray = new ArrayList<>();

public Automobile(String make, String color, int year, int mileage) {
    this.make = make;
    this.color = color;
    this.year = year;
    this.mileage = mileage;
    autoArray.add(this);


}

//setters (mutators)
public void setYearModel(int y) {
    year = y;
}

public void setMake(String type) {
    make = type;
}

public void setColor(String col) {
    color = col;
}

public void setMileage(int miles) {
    mileage = miles;
}

public String toString() {
    return "test = "   color   "; test "   year   "; test "   year   "; test "   make;
}


private ArrayList addVehicle(String m, String c, int y, int mile) {
    this.make = m;
    this.color = c;
    this.year = y;
    this.mileage = mile;
    autoArray.add(this);
    return autoArray;
 }
    public static void main(String[] args) {

    Automobile cars = new Automobile("kelvin","luke", 6, 9 );
    cars.autoArray.forEach(System.out::println);
    cars.addVehicle("horny","luke", 6, 9 );
    cars.autoArray.forEach(System.out::println);
}
  

}

Ответ №1:

Вам нужно создать новый Automobile в addVehicle() вместо изменения существующего:

 private ArrayList addVehicle(String m, String c, int y, int mile) {
    autoArray.add(new Automobile(m, c, y, mile));
    return autoArray;
}
  

Это должно решить вашу проблему. Но да, в идеале вам также следует провести рефакторинг своего кода, как предлагали другие комментаторы, потому что не имеет смысла создавать ArrayList<Automobile> внутри каждого экземпляра Automobile .

Ответ №2:

Попробуйте подумать о вашей ситуации более осязаемо. Давайте предположим, что ваш Automobile класс представляет реальный автомобиль.

Имеет ли смысл для Automobile иметь в нем список других машин? Есть ли в вашем реальном мире другие автомобили?

Лучшим подходом здесь было бы полностью удалить ArrayList из вашего Automobile класса. Вместо этого этот список должен храниться где-то еще, где вы добавляете в него новые автомобили.


Вот возможный новый main() метод, который вам следует рассмотреть:

 public static void main(String[] args) {

    ArrayList<Automobile> autos = new ArrayList<>();
    autos.add(new Automobile("kelvin", "luke", 6, 9));
    autos.add(new Automobile("horny", "luke", 6, 9));

    autos.forEach(System.out::println);
}
  

Ответ №3:

Ваша проблема заключается в том, как хранятся объекты. Изменяя параметры для класса Automobile и затем добавляя this в список, вы просто добавляете тот же экземпляр снова с отредактированными параметрами.

Вам нужно переместить список за пределы класса Automobile, а затем создать новые автомобили с помощью конструктора, а затем добавить их в список.