Инициализируйте Array в конструкторе и перейдите на карту в Angular.

Ломбок учитывает эти @NonNull аннотации при генерации @AllArgsConstructor. Это также имеет место для конструктора, который порождается @Builder. Это примерный код конструктора в вашем примере:

SomeObject(@NonNull final String mandatoryField1, @NonNull final String mandatoryField2, final Integer optionalField) {
    if (mandatoryField1 == null) {
        throw new java.lang.NullPointerException("mandatoryField1 is marked @NonNull but is null");
    }
    if (mandatoryField2 == null) {
        throw new java.lang.NullPointerException("mandatoryField2 is marked @NonNull but is null");
    }
    this.mandatoryField1 = mandatoryField1;
    this.mandatoryField2 = mandatoryField2;
    this.optionalField = optionalField;
}

Таким образом, FindBugs теоретически может найти проблему, потому что нулевая проверка присутствует в конструкторе, который позже вызывается с помощью null в вашем примере. Тем не менее, FindBugs, вероятно, недостаточно мощный, чтобы сделать это (пока?), И я не знаю какого-либо настраиваемого детектора, который способен на это.

Остается вопрос, почему ломбок не добавляет эти проверки к методам setter строителя (что облегчило бы FindBugs выявить проблему). Это связано с тем, что вполне нормально работать с экземпляром построителя, который по-прежнему имеет @NonNull поля, установленные на null. Рассмотрим следующий прецедент:

Вы можете, например, создать новый строитель из экземпляра с использованием метода toBuilder(), а затем удалить одно из своих обязательных полей, вызвав mandatoryField1(null) (возможно, потому, что вы хотите чтобы избежать утечки значения экземпляра). Затем вы можете передать его другому методу, чтобы он снова заполнил обязательное поле. Таким образом, lombok не должен и не должен добавлять эти нулевые проверки к различным методам настройки сгенерированного построителя. (Разумеется, ломбок может быть расширен таким образом, чтобы пользователи могли «отказаться» от генерации более нулевых проверок, см. это обсуждение в GitHub . Однако это решение зависит от поддерживающих ломбок).

TLDR: проблема может быть найдена теоретически, но FindBugs недостаточно эффективен. С другой стороны, ломбок не должен добавлять дополнительные проверки, потому что он нарушит законные варианты использования.

0
задан Felix Christo 19 January 2019 в 06:27
поделиться

1 ответ

Есть несколько мест, где вы странным образом используете get(), на самом деле вы должны попытаться использовать больше скрипта Type .

Если ответ уже json, то вы можете использовать

this.http.get<ABC[]>(req);   

Если ответ имеет формат text, то, возможно, вы можете напрямую использовать

this.http.get<string>(req).pipe(map(s => JSON.parse(s)));
// get the typed array directly

С помощью этого основного трюка мы можем напрямую получить данные и представить их с помощью

<div *ngFor="let c of _ret">
  <h3>{{ c.time }}</h3>
  <ul>
     <li *ngFor="let info of c.abc_Info">{{ info["item"] }} : {{ info["quantity"] }}</li>
  </ul>
</div>

. Вы можете проверить онлайн-демонстрацию , в которой я использую interceptor для высмеивать ответ сервера.

0
ответ дан Hearen 19 January 2019 в 06:27
поделиться
Другие вопросы по тегам:

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