MapStruct - Как указать универсальный тип атрибута?

Mapstruct не может найти универсальный тип атрибута. Давайте рассмотрим пример, чтобы уточнить, что я пытаюсь сделать.

Учитывая следующее dtos:

class ListForm<T> {
 private Collection<T> adds;
 private Collection<T> changes;
 private Collection<T> deletes;
}

class Person {
 private String name;
}

class PersonDto { 
 private String name;
}

Я пытаюсь реализовать следующий маппер:

@Mapper
public interface OccupantMapper {
    ListForm<Person> test(ListForm<PersonDto> person);

    Collection<Person> toPersons (Collection<PersonDto> persons);
}

Но вот часть того, что генерирует mapstruct:

ListForm<Person> listForm= new ListForm<Person>();
if ( occ.getAjouts() != null ) {
        if ( listForm.getAjouts() != null ) {
            // problem here, mapstruct can't find the type of the attribute
            Collection<T> targetCollection = person.getAdds();
            if ( targetCollection != null ) {
                listForm.getAjouts().addAll( targetCollection );
            }
        }
    }

Как видно из приведенного ниже кода, mapstruct не может найти тип целевой коллекции. И это не преобразовать список PersonDto в список Person. Вот что должен сгенерировать mapstruct.

Collection<Occupant> targetCollection = toPersons(person.getAdds());

Можете ли вы сказать мне, если это ошибка? Если есть исправление? Или я должен сделать это по-другому? Thks,

2 ответа

Решение

Это было исправлено в выпущенном MapStruct 1.1.0.Beta1

Можете ли вы собрать MapStruct из последней версии мастера ( https://github.com/mapstruct/mapstruct) и посмотреть, решит ли это проблему для вас? На прошлой неделе я исправил ошибку, которая, по-моему, была такой же, как у вас.

Вам просто нужно запустить "mvn clean install" и обратиться к SNAPSHOT-версии зависимости в вашем проекте.

Другие вопросы по тегам