У меня есть класс автомобиля:
public class Car {
public String name = null; // Name of the Car Model
public String color = null; // Color of the car
Car(){
/** DO WHATEVER***/
}
}
Затем в классе main() я делаю это:
LinkedList<Car> myCars = new LinkedList<Car>();
myCars.add(new Car());
myCars.add(new Car());
myCars.add(new Car());
myCars.get(0).name = "Geep";
myCars.get(0).color = "Black";
myCars.get(1).name = "Camry";
myCars.get(1).color = "Red";
myCars.get(2).name = "Honda";
myCars.get(2).color = "Green";
Мой вопрос:
Lets assume that at the time of Car object creations, we do not have values of these instance variables and we get them at a later stage, so that constructor initialization is not feasible.
Тогда это правильный путь выше? Я имею в виду, как переменные экземпляра для каждого объекта будут присваиваться значениям в коллекции Java. Я имею в виду, используя метод get()? Я понимаю, если у нас много автомобилей
объектов, то мы будем использовать цикл for.
Пожалуйста, объясни.
Спасибо.
Было бы разумнее изменить конструктор из: /** DO WHATEVER***/
к чему-то вроде:
Car(String name, String color){
this.name = name;
this.color = color;
}
а затем вставить в список:
myCars.add(new Car("Geep", "Black"));
myCars.add(new Car("Camry", "red"));
...
Если у вас нет "деталей" автомобилей, вам просто нужно создать экземпляр списка с 50 автомобилями, а затем "добавить детали" - возникает еще один вопрос: откуда берутся детали? если вы не знаете этого заранее, он должен исходить из вечного источника (пользовательский ввод, файл и т.д.), и тогда было бы целесообразно запустить цикл в списке и добавить детали:
for (Car car : myCars) {
String name = ... // get the details of the car from an external source
String type = ... // get the details of the car from an external source
car.setName(name); // of course you'll have to implement setName() and setType()
car.setType(type); // which is a better practice than exposing the class members via public access
}
Что касается правильного пути: я предпочитаю переопределять конструктор, чтобы мой код инициализации и настройки был в одном месте.
По сути, я бы предоставил конструктору для Car как:
public class Car {
public String name = null; // Name of the Car Model
public String color = null; // Color of the car
public Car(String name, String color){
super();
this.name = name;
this.color = color;
}
}
Затем я помещал его в свою коллекцию как:
LinkedList<Car> myCars = new LinkedList<Car>();
myCars.add(new Car("Jeep", "Black"));
myCars.add(new Car("Ferrari", "Red"));
Во-первых, не рекомендуется выставлять переменные экземпляра (общедоступные). Измените общественность на частную и создайте геттеры. Кроме того, вы можете создать конструктор, который принимает имя и цвет в параметрах:
public class Car {
private String name = null;
private String color = null;
public Car(String name, String color) {
this.name = name;
this.color = color;
}
public String getName() {
return name;
}
public String getColor() {
return color;
}
}
Тогда вы можете сделать:
LinkedList<Car> myCars = new LinkedList<Car>();
myCars.add(new Car("Jeep", "Black"));
myCars.add(new Car("Camry", "Red"));
myCars.add(new Car("Honda", "Green"));
Есть много способов сделать это, но я бы определенно установил информацию о машине, прежде чем добавлять ее в список.