Является ли использование оператора instanceof плохой практикой в следующем контексте?
public interface IWriter {
public abstract void write(Dto dto);
}
public abstract class Dto {
private long id;
public void setId(long id) {this.id = id;}
public long getId() {return id;}
}
public class DtoA extends Dto {
...
}
public class DtoB extends Dto {
...
}
public class MyWriterA implements IWriter {
@Override
public void writer(Dto dto) {
if (!(dto instanceof DtoA))
return;
...
}
}
public class MyWriterB implements IWriter {
@Override
public void writer(Dto dto) {
if (!(dto instanceof DtoB))
return;
...
}
}
Существует множество мифов об использовании этого оператора, и я не совсем уверен, что то, что я делаю, не чушь.
У меня есть много разных реализаций писателя которые я хочу объединить в одном интерфейсе. Проблема в том, что не каждый DTO применим для каждого писателя. В моем фактическом коде есть глубокая иерархия DTO, которые расширяют DtoA и DtoB, и либо ветвь иерархии DtoA или DtoB применима для писателя, но только в некоторых случаях и то и другое.
Следует ли мне избегать использования абстрактного класса Dto в качестве аргумента для абстрактного метода write (Dto dto)
?
РЕДАКТИРОВАТЬ: Прочтите комментарии к принятому ответу.