Наследование решения OptaPlanner с обобщениями вызывает ошибку - PullRequest
1 голос
/ 01 мая 2019

У меня есть абстрактный обобщенный класс решения "Foo", который наследуют мои конкретные реализации.Этот класс является универсальным и позволяет реализующему классу определять их конкретное значение PlanningEntity, которое расширяет "Bar"

. Это заглушает optaplanner, который выдает ошибку, подобную следующей:

SolutionProperty(список) не был клонирован, как ожидалось.FieldAccessingSolutionCloner не удалось распознать поле этого свойства, возможно, из-за того, что его имя отличается от другого.

Я попытался заменить «EntityType» конкретным реализующим классом, и кажется, что все работает.Однако я пытаюсь извлечь общие функциональные возможности, чтобы уменьшить объем обслуживания, и это мешает мне извлечь все общие черты.

Я также попытался прочесать документацию OptaPlanner.Я не смог найти пример, подобный этому.

@PlanningSolution
public abstract class Foo <EntityType extends Bar> implements Solution<HardMediumSoftScore>
{
    protected HardMediumSoftScore score;
    protected ArrayList<EntityType> list = new ArrayList<>();

    @PlanningEntityCollectionProperty
    public ArrayList<EntityType> getList()
    {
        return this.list;
    }

    @Override
    public HardMediumSoftScore getScore()
    {
        return this.score;
    }

    public void setScore(HardMediumSoftScore score)
    {
        this.score = score;
    }
}

Я ожидаю, что смогу наследовать без ошибок выброса optaplanner.

Настроен ли optaplanner для обработки обобщений / наследования?Я использую 6.5, есть ли более новая версия, которая поддерживает это лучше?

1 Ответ

0 голосов
/ 07 мая 2019

Добавьте аннотацию @DeepPlanningClone в это поле.

Кроме того, перейдите с implements Solution на @PlanningSolution, см. рецепт обновления на optaplanner.org.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...