Добавление переменных экземпляра к объектам с использованием коллекции LinkedList

1

У меня есть класс автомобиля:

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.

Пожалуйста, объясни.

Спасибо.

  • 0
    правильным способом в этом случае будет инициализация этих значений в конструкторе Car
  • 0
    @Navchetan: Не могли бы вы перефразировать / уточнить, что вы подразумеваете под: «Я имею в виду, как переменные экземпляра каждого объекта будут присваиваться значения в коллекции Java. Я имею в виду, используя метод get ()? Я понимаю, если у нас много автомобильных объектов, то мы будем использовать для цикла ".
Показать ещё 1 комментарий
Теги:
collections

3 ответа

4
Лучший ответ

Было бы разумнее изменить конструктор из: /** 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
}
  • 0
    Да, я понимаю. Но допустим, что во время создания объекта у нас нет значений переменных экземпляра, и мы получим их на более позднем этапе. И есть около 50+ переменных экземпляра на объект. Тогда это правильный и оптимальный способ: myCars.get (0) .name = "Geep"; myCars.get (0) .color = "Black"
  • 0
    @Navchetan увидеть дополнение
Показать ещё 3 комментария
0

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

По сути, я бы предоставил конструктору для 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"));
  • 0
    Да, я понимаю. Но допустим, что во время создания объекта у нас нет значений переменных экземпляра, и мы получим их на более позднем этапе. И есть около 50+ переменных экземпляра на объект. Тогда это правильный и оптимальный способ: myCars.get (0) .name = "Geep"; myCars.get (0) .color = "Black"
  • 0
    @Navchetan понял, в таком случае я бы лучше попробовал: Car c = myCars.get (0); c.setName (); и т.д. ... Если у вас слишком много переменных экземпляра на объект, вы также можете взглянуть на Pattern Builder. Я скоро выложу пример кода и некоторые ссылки
0

Во-первых, не рекомендуется выставлять переменные экземпляра (общедоступные). Измените общественность на частную и создайте геттеры. Кроме того, вы можете создать конструктор, который принимает имя и цвет в параметрах:

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"));

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню