Рефакторинг для дженериков - это немалое количество боли (хотя, скорее всего, оно того стоит).
Это будет особенно ужасно, если код использует ваш DTO-интерфейс следующим образом:
DTO user = userDAO.getById(45);
((UserDTO)user).setEmail(newEmail)
userDAO.update(user);
Я видел, как это сделано (гораздо более тонкими способами).
Вы можете сделать это:
public DeprecatedDAO implements DAO
{
public void save(DTO dto)
{
logger.warn("Use type-specific calls from now on", new Exception());
}
}
public UserDAO extends DeprecatedDAO
{
@Deprecated
public void save(DTO dto)
{
super.save(dto);
save((UserDTO)dto);
}
public void save(UserDTO dto)
{
// do whatever you do to save the object
}
}
Это не отличное решение, но может быть проще в реализации; Ваш унаследованный код все еще должен работать, но он будет генерировать предупреждения и трассировки стека, чтобы помочь вам выследить их, и у вас также есть реализация с безопасным типом.