#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 для разрешения зависимости компиляции.