Если вы можете манипулировать общим интерфейсом, вы можете добавить add в enum и заставить каждый класс возвращать уникальное значение.Вам не понадобится instanceof или шаблон посетителя.
Для меня логика должна быть записана в операторе switch, а не в самом объекте.Это было мое решение:
ClassA, ClassB, and ClassC implement CommonClass
Интерфейс:
public interface CommonClass {
MyEnum getEnumType();
}
Enum:
public enum MyEnum {
ClassA(0), ClassB(1), ClassC(2);
private int value;
private MyEnum(final int value) {
this.value = value;
}
public int getValue() {
return value;
}
Impl:
...
switch(obj.getEnumType())
{
case MyEnum.ClassA:
ClassA classA = (ClassA) obj;
break;
case MyEnum.ClassB:
ClassB classB = (ClassB) obj;
break;
case MyEnum.ClassC:
ClassC classC = (ClassC) obj;
break;
}
...
Если вы используете Java 7, вы можете поместить строковые значения для enum, и блок регистра переключателей будет по-прежнему работать.