Привязка Java по сравнению с ручным определением классов

Я бы отошел от массивов, если длина:

  • неизвестно
  • может измениться

Я предлагаю использовать один из различных [111 ] реализации из JDK, в частности ArrayList и LinkedList .

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

Второй - это список узлов, что означает, что для каждого добавляемого вами элемента новый (внутренний) объект узла добавляется к последнему узлу.

Вы, конечно, должны изменить свой код для этого.

  1. Определите _cities как List: private List _cities
  2. Инициализируйте это с помощью требуемой реализации в конструкторе: _cities = new ArrayList<>(); или _cities = new LinkedList<>();
  3. В вашем методе добавления вы можете просто вызвать: _cities.add(new City(cityName, XcityCenter, YcityCenter, XStationPoint, YStationPoint, numOfResidents, numOfNeighborhoods));
  4. В вашем getNumOfResidents вы можете использовать следующий фрагмент (который использует API потокового Java, представленный в Java 8):

    return _cities.stream()
        .mapToLong(City::getNumOfResidents)
        .sum();
    
  5. для getCities() вам нужно изменить тип возвращаемого значения на List и использовать следующее: return new ArrayList<>(_cities) или return new LinkedList<>(_cities) в зависимости от реализации, которую вы хотите использовать.

5
задан Community 23 May 2017 в 11:44
поделиться

2 ответа

Я не думаю, что существует категорический ответ на Ваш вопрос. Но я могу дать Вам некоторый трудный выигранный совет. Вот некоторые вещи рассмотреть:

  1. Это является трудоемким для записи маршалинга и кода unmarhsalling, особенно в первый раз.

  2. Необходимо будет провести довольно мало времени, изучая нюансы библиотеки DOM (Xerces или его эквивалент).

  3. Существует много дублирования, таким образом, Вы будете в конечном счете управляться к записи некоторых классов помощника.

  4. Вам будет нужно много модульных тестов, чтобы удостовериться, что Вы покрыли все свои базы в области дополнительных элементов и атрибутов.

Рассмотрение того списка, довольно легко сказать, "что это - то, что JAXB делает для меня". Сделав для этого в течение многих лет, я сказал бы, что JAXB экономит Вам довольно мало времени и усилия, особенно последнее повторение JAXB в Java 5/6.

Но если бы Вы идете с JAXB существует один урок, мы научились на горьком опыте, который я хотел бы провести:

*** Не делайте для разрешения сгенерированной утечке классов JAXB в приложение.

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

Теперь мы всегда скрываемся, наш JAXB генерировал классы позади фасада или фабрики, отображающейся от классов JAXB до нашего собственного домена POJOs, которые имеют необходимое поведение. Мы думаем о JAXB, поскольку мы делаем JDBC; JAXB является просто другим источником данных, другой способ получить данные к и от нашего домена POJOs. Домен POJOs является секретным соусом, и мы управляем, как они кодируются и как они используются. JAXB является просто инструментом для маршалинга и немаршалинга.

14
ответ дан 18 December 2019 в 13:20
поделиться

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

0
ответ дан 18 December 2019 в 13:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: