J'ai un scénario dans lequel je dois convertir Resource
objets (à partir de demandes réseau) en RealmObject
objets (couche de données) en utilisant MapStruct pour gérer le mappage d'objet. Je cherche à créer une interface Mapper
générique pour éviter d'avoir à définir un mappeur personnalisé pour chaque ressource, comme ceci:L'utilisation de MapStruct dans Android pour mapper des types génériques?
import org.mapstruct.Mapper;
import org.mapstruct.factory.Mappers;
import io.realm.RealmObject;
import moe.banana.jsonapi2.Resource;
@Mapper
public interface ResourceMapper <T extends Resource, I extends RealmObject> {
ResourceMapper INSTANCE = Mappers.getMapper(ResourceMapper.class);
I resourceToRealm(T resource);
}
mais cela se traduit par une erreur de build (compilation est réussie, cependant):
Error:(13, 4) error: Can't generate mapping method for a generic type variable source.
N'est-ce pas possible? Sinon, je devrais créer un mappeur personnalisé pour chaque Resource
et utiliser un switch
pour indiquer au désérialiseur quel mapper utiliser en fonction du type de classe etc ... il deviendrait probablement moche et n'entraînerait pas de code très SEC. Leur documentation n'est pas très clair à ce sujet.
https://github.com/mapstruct/mapstruct/issues/583 semble être encore en phase d'amélioration pour les types génériques – Mani
Le problème lié est une amélioration pour quelque chose d'autre, pas ce que la question concerne – Filip