#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, а затем создать новые автомобили с помощью конструктора, а затем добавить их в список.