Как реализовать специальный преобразователь типов c? - PullRequest
0 голосов
/ 26 мая 2020

У меня есть исходный класс, который определяет строковые атрибуты как CharSequence (к сожалению).

Итак, следующее:

@Mapper(source="charSeq", target="str")

дает мне:

Может Не сопоставить свойство "java .lang.CharSequence charSeq" с "java .lang.String str". Рассмотрите возможность объявления / реализации метода сопоставления: «java .lang.String map (java .lang.CharSequence value)»

Как я могу реализовать этот метод сопоставления и сделать его доступным для все мои картографы, чтобы я сделал это раз и навсегда?

1 Ответ

1 голос
/ 26 мая 2020

Создайте преобразователь String-CharSequence:

@Mapper
public interface CharSequenceMapper {
    default String map(CharSequence charSequence) {
        return charSequence.toString();
    }

    default CharSequence map(String string) {
        return string;
    }
}

И используйте его с вашим преобразователем:

@Mapper(uses = CharSequenceMapper.class)
public interface MyMapper {
    // some code
}

IMHO преобразование CharSequence-String должно быть встроено в структуру. Рассмотрите возможность подачи запроса на функцию по номеру https://github.com/mapstruct/mapstruct/issues.

...