Получение данных из универсального типа в формате {[]}

#java #generics

#java #общие

Вопрос:

Я новичок в использовании универсального, поэтому я не уверен, как получить значение внутри него. Я пытаюсь получить seller id из общего, но метод, который я могу использовать, — это только .get() . Можете дать несколько советов о том, как получить seller id ?

 {OtherSellerData: [sellerId : DD00000012, sellerName : TRVE HOLDING BERHAD, details : , sellerBank : 100002050, Status : 2]}
  

Код

     @Override
    public void write(List<? extends T> items) throws Exception {
        for (ItemWriter delegate : delegates) {
            if (! items.isEmpty()) {
                delegate.write(items);
                log.info("Seller ID {} is saved successfully", items.get(0));
            }
        }
    }
  

Я также попробовал приведенный ниже код, но результат тот же

         for (T c : items) {
            log.info("Seller ID {} is saved successfully", c);
        }
  

Код в модальном классе

     private String sellerId;
    private String sellerName;
    private String sellerBank;

    public String getSellerId() {
        return sellerId;
    }

    public String getSellerName() {
        return sellerName;
    }

    public String getSellerBank() {
        return sellerBank;
    }

    public String getDetails() {
        return details;
    }
  

Комментарии:

1. Из какого общего вы хотите получить сведения?

2. вкл List<? extends T> items . Я пытаюсь получить seller id единственное

3. Но метод имеет здесь возврат void. Вы хотите обновить эту пустоту?

4. Нет, мне нужно только отобразить журнал, поскольку это пакетное задание spring. Я обновляю код

5. Вам нужно сделать BaseModel для модального класса и универсального должен быть список<? расширяет базовую модель>. И эта базовая модель должна определять имя метода.

Ответ №1:

Вы можете создать интерфейс IModel с помощью метода getId(). Как показано ниже:

Интерфейс :

 public interface IModel {

  String getId();
}
  

Класс модели :

 public class Model implements IModel {

  private String sellerBank;

  private String sellerId;

  private String sellerName;

  @Override
  public String getId() {
    return sellerId;
  }

  public String getSellerBank() {
    return sellerBank;
  }

  public String getSellerId() {
    return sellerId;
  }

  public String getSellerName() {
    return sellerName;
  }

}
  

А затем используйте этот идентификатор в методе записи, как показано ниже :

 @Override
    public void write(List<? extends IModel> items) throws Exception {
        for (ItemWriter delegate : delegates) {
            if (! items.isEmpty()) {
                delegate.write(items);
                log.info("Seller ID {} is saved successfully", items.get(0).getId());
            }
        }
    }
  

Комментарии:

1. Я понимаю ваш ответ. Вы имеете в виду, что я не могу получить доступ к идентификатору продавца при использовании универсального типа?

2. Нет, потому что во время компиляции тип T не разрешается из метода ввода. Или, в качестве альтернативы, вы можете явно преобразовать объект, а затем использовать его (не предпочтительно). Или вы можете создать реализацию универсального класса, в которой вы передадите тип T для разрешения зависимости компиляции.