Является ли плохой практикой использование оператора 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;
...
}
}
Существует множество мифов об использовании этого оператора, и я не совсем уверен, что то, что я делаю,не bunk.
У меня есть много различных реализаций писателя, которые я хочу объединить в одном интерфейсе.Проблема не в каждом DTO, применимом к каждому писателю.В моем реальном коде есть глубокая иерархия DTO, которая расширяет DtoA и DtoB, и ветвь иерархии DtoA или DtoB применима для писателя, но только в нескольких случаях.
Следует ли мне избегатьиспользуя абстрактный класс Dto в качестве аргумента для абстрактного write(Dto dto)
метода?
РЕДАКТИРОВАТЬ: Пожалуйста, прочитайте комментарии к принятому ответу.