Как поставить диспетчеризацию в Visitor Pattern в суперкласс? - PullRequest
0 голосов
/ 18 апреля 2019

Я бы хотел использовать DoubeDispatch, чтобы переслать родословную некоторой строки отображения для моих сотен классов сущностей в служебный класс.

Я не хочу реализовывать String createStringRepresentation (StringRepresentationBuilder builder) в каждом отдельном объектном классе, поэтому я попытался использовать обобщенные значения:

public abstract class AbstractEntity<T extends AbstractEntity>  {
    public String createStringRepresentation(StringRepresentationBuilder builder) {
        return builder.createStringRepresentation((T)this);
    }
}

public class SomeEntity extends AbstractEntity<SomeEntity> { }

public class StringRepresentationBuilder {
    public String createStringRepresentation(Object obj) {
        ...
    }
    public String createStringRepresentation(SomeEntity entity) {
        ...
    }
}

К сожалению, это не работает. Приведение игнорируется, и createStringRepresentation (Object obj) вызывается для SomeEntity .

Как я могу решить эту проблему, не прибегая к реализации метода в каждом классе сущностей?

...