Что я могу включить в конструктор? - PullRequest
1 голос
/ 28 октября 2011

Я работаю над своей первой Java-программой как домашнее задание.Задача состоит в том, чтобы иметь программу каталогизации для хранения и управления некоторыми продуктами.

У меня есть два класса, класс каталога и класс продукта.Класс продукта хранит данные о моих продуктах (ID, цена, цвет).Список каталога содержит массив товаров.

Мой код для каталога выглядит примерно так:

public class Catalog() 
    {
     static Product[] productList;

     Catalog () {
     productList = new Product[99];
     }

     populateCatalog {
     // Assign each item product in the product array an ID, Price & Color
     }
 }

ProductList не изменяется во всей программе, поэтому добавлять его не рекомендуется.код из метода populateCatalog в конструктор?

Ответы [ 5 ]

5 голосов
/ 28 октября 2011

То, что вы делаете в конструкторе, прекрасно. Другой вариант - просто инициализировать productList при объявлении, например

static Product[] productList = new Product[99];

Однако ....

Вы не хотите, чтобы productList был статичным. Как сейчас, каждый экземпляр Catalogue НЕ имеет productList; у класса в целом есть один productList, который он разделяет между всеми экземплярами (что означает static). Имеет смысл для каждого каталога иметь свой собственный список товаров, верно? Поэтому измените вашу декларацию на

private Product[] productList;

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

2 голосов
/ 28 октября 2011

Если вы можете инициализировать каждый элемент productList во время конструктора, я бы сказал, что на самом деле было бы лучше сделать это, вместо того, чтобы показывать метод, который позже можно будет вызвать снова. Объекты, которые были завершены во время строительства и позже не изменяются, более надежны в использовании и по своей природе поточно-ориентированы. Термин «неизменный», хотя я не совсем уверен, что он применим в этом случае.

1 голос
/ 28 октября 2011

Если productList должен быть статическим, вы хотите сделать это следующим образом:

public class Catalog() {
     public static Product[] productList;

     static {
         productList = new Product[99];
     }
}
1 голос
/ 28 октября 2011

Заполнение массива Catalog в конструкторе - это не то, что запрещено какими-либо правилами. Это зависит от того, является ли процесс заполнения длительным или нет. Кроме того, рекомендуется заполнить его в конструкторе, потому что таким образом вы всегда уверены в правильности построения объекта каталога до того, как внешний код его увидит. Если это сделано в отдельном методе, ваш клиентский код может забыть вызвать его, прежде чем начать его использовать, и это может привести к проблемам.

0 голосов
/ 29 октября 2011

Мне известно, что я делал это:

public class Catalog {
  static Product[] productList = { //
  //
      new Product(1, "one"), //
      new Product(2, "two"), //
      // ...
      new Product(99, "99th"), //
  };
}

(строчные комментарии предназначены для того, чтобы автоформатирование моей IDE не делало его нечитаемым.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...