Мне нужен интерфейс, который гарантирует мне определенный метод, в том числе особую сигнатуру. Пока что это то, что у меня есть:
public interface Mappable<M> {
M mapTo(M mappableEntity);
}
Проблема возникает, когда класс должен быть сопоставим с несколькими другими объектами. Идеальный случай был бы такой (не Java):
public class Something implements Mappable<A>, Mappable<B> {
public A mapTo(A someObject) {...}
public B mapTo(B someOtherObject) {...}
}
Каков был бы лучший способ достичь этого, оставаясь как можно более «общим»?
C
и хотите,Something
чтобы его можно было сопоставить, вам нужно будет изменитьSomething
, что слишком сильно связывает. Просто добавление новогоSoemthingToCMapper
менее навязчиво.Учитывая, что нельзя использовать несколько интерфейсов, вы можете рассмотреть возможность использования инкапсуляции. (пример использования java8 +)
Пожалуйста, проверьте здесь для получения дополнительной информации и больше примеров: Как создать класс Java, который реализует один интерфейс с двумя универсальными типами? ,
источник
Если вы хотите сопоставить User с UserDTO и сопоставить User с UserViewModel, вам потребуются две отдельные реализации. Не складывайте всю эту логику в один класс - это не имеет смысла.
Обновление, чтобы держать Иоахима счастливым
Но теперь мы находимся в сфере Automapper ( http://automapper.codeplex.com/wikipage?title=Custom%20Type%20Converters )
источник
IMappable
это хорошее название для чего-то, что отображает другие вещи.Mapper
(илиIMapper
, если нужно ;-)), вероятно, более правильно. (Кстати: нет, это не было моим отрицательным голосом).