Mapping interface between POJOs and DTOs
public interface Dto&lt;K, V&gt; extends Map&lt;K, V&gt; {} why don't you use simply a Map? Again, it is the same discussion related to marker interfaces we already had in your original question.

I'd define Mapper in the following way:

public interface Mapper&lt;T, K, V&gt; {
    public Dto&lt;K, V&gt; toDto(T obj);
    public T fromDto(Dto&lt;K, V&gt; dto);
}


I don't understand the reason why you need MapperImpl. What you need are concrete classes imlementing your interface for your specific types.

Imagine you want to map a Date to a Map&lt;String,Integer&gt;. You need something like this:

class DateMapper implements Mapper&lt;Date, String, Integer&gt;
{
    public Dto&lt;String, Integer&gt; toDto(Date date)
    {
        Dto&lt;String, Integer&gt; dto = new Dto&lt;String, Integer&gt;();
        dto.put("Day", date.Day());
        dto.put("Month", date.Month());
        dto.put("Year", date.Year());
    }

    public Date fromDto(Dto&lt;String, Integer&gt; dto)
    {
        return new Date(dto.get("Year"), dto.get("Month"), dto.get("Day"));
    }
}


I think that at this point you might be thinking at how you could obtain an instance of DateMapper. I think you should use some sort of factory or build it using reflection depending on what is better in your use case.